public class HashedWheelTimer extends java.lang.Object implements Timer
Timer
针对近似I / O超时调度进行了优化。
TimerTask
。
HashedWheelTimer
,每打勾一次,将检查日程表中是否有任何TimerTask
,并执行它们。
您可以通过在构造函数中指定更小或更大的滴答持续时间来增加或减少执行时间的精确度。 在大多数网络应用程序中,I / O超时不需要准确。 因此,默认的滴答持续时间为100毫秒,在大多数情况下您不需要尝试不同的配置。
HashedWheelTimer
维护一个名为'wheel'的数据结构。
简而言之,轮子是散列表TimerTask
的散列表,其散列函数是“任务的死线”。
每个轮子的缺省刻度数(即轮子的大小)为512.如果要安排大量超时,则可以指定较大的值。
HashedWheelTimer
在实例化和启动时创建一个新线程。
因此,您应该确保只创建一个实例并在整个应用程序中共享它。
常见的错误之一就是为您的应用程序无响应,为每个连接创建一个新实例。
HashedWheelTimer
基于George Varghese和Tony Lauck的文章'Hashed and Hierarchical Timing Wheels: data structures to efficiently implement a timer facility' 。
更全面的幻灯片位于here 。
Modifier and Type | Field and Description |
---|---|
static int |
WORKER_STATE_INIT |
static int |
WORKER_STATE_SHUTDOWN |
static int |
WORKER_STATE_STARTED |
Constructor and Description |
---|
HashedWheelTimer()
使用默认线程工厂(
Executors.defaultThreadFactory() ),默认滴答持续时间以及每个轮子的缺省滴答数创建新计时器。
|
HashedWheelTimer(long tickDuration, java.util.concurrent.TimeUnit unit)
用默认线程工厂(
Executors.defaultThreadFactory() )和每个轮子的缺省数量创建一个新的计时器。
|
HashedWheelTimer(long tickDuration, java.util.concurrent.TimeUnit unit, int ticksPerWheel)
用默认线程工厂创建一个新的定时器(
Executors.defaultThreadFactory() )。
|
HashedWheelTimer(java.util.concurrent.ThreadFactory threadFactory)
使用默认的滴答持续时间和每个轮子的默认滴答数创建新的计时器。
|
HashedWheelTimer(java.util.concurrent.ThreadFactory threadFactory, long tickDuration, java.util.concurrent.TimeUnit unit)
使用每个轮子默认的滴答数创建一个新的计时器。
|
HashedWheelTimer(java.util.concurrent.ThreadFactory threadFactory, long tickDuration, java.util.concurrent.TimeUnit unit, int ticksPerWheel)
创建一个新的计时器。
|
HashedWheelTimer(java.util.concurrent.ThreadFactory threadFactory, long tickDuration, java.util.concurrent.TimeUnit unit, int ticksPerWheel, boolean leakDetection)
创建一个新的计时器。
|
HashedWheelTimer(java.util.concurrent.ThreadFactory threadFactory, long tickDuration, java.util.concurrent.TimeUnit unit, int ticksPerWheel, boolean leakDetection, long maxPendingTimeouts)
创建一个新的计时器。
|
Modifier and Type | Method and Description |
---|---|
protected void |
finalize() |
Timeout |
newTimeout(TimerTask task, long delay, java.util.concurrent.TimeUnit unit)
在指定的延迟后安排指定的 TimerTask 执行一次执行。
|
long |
pendingTimeouts()
返回此 Timer 的暂挂超时数。
|
void |
start()
明确启动后台线程。
|
java.util.Set<Timeout> |
stop()
释放由此 Timer 获取的所有资源并取消所有已安排但尚未执行的任务。
|
public static final int WORKER_STATE_INIT
public static final int WORKER_STATE_STARTED
public static final int WORKER_STATE_SHUTDOWN
public HashedWheelTimer()
Executors.defaultThreadFactory()
),默认滴答持续时间以及每个轮子的缺省滴答数创建新计时器。
public HashedWheelTimer(long tickDuration, java.util.concurrent.TimeUnit unit)
Executors.defaultThreadFactory()
)和每个轮子的默认数量的刻度创建新的计时器。
tickDuration
- 勾号之间的时间间隔
unit
-所述的时间单位
tickDuration
java.lang.NullPointerException
- 如果
unit
是
null
java.lang.IllegalArgumentException
- 如果
tickDuration
<= 0
public HashedWheelTimer(long tickDuration, java.util.concurrent.TimeUnit unit, int ticksPerWheel)
Executors.defaultThreadFactory()
)。
tickDuration
- 勾号之间的持续时间
unit
-所述的时间单位
tickDuration
ticksPerWheel
- 轮子的大小
java.lang.NullPointerException
- 如果
unit
是
null
java.lang.IllegalArgumentException
- 如果
tickDuration
和
ticksPerWheel
<= 0
public HashedWheelTimer(java.util.concurrent.ThreadFactory threadFactory)
threadFactory
-一个ThreadFactory
,创建一个背景Thread
专用于TimerTask
执行。
java.lang.NullPointerException
- 如果
threadFactory
是
null
public HashedWheelTimer(java.util.concurrent.ThreadFactory threadFactory, long tickDuration, java.util.concurrent.TimeUnit unit)
threadFactory
-一个ThreadFactory
,创建一个背景Thread
专用于TimerTask
执行。
tickDuration
- 勾号之间的持续时间
unit
-所述的时间单位
tickDuration
java.lang.NullPointerException
- 如果
threadFactory
和
unit
是
null
java.lang.IllegalArgumentException
- 如果
tickDuration
<= 0
public HashedWheelTimer(java.util.concurrent.ThreadFactory threadFactory, long tickDuration, java.util.concurrent.TimeUnit unit, int ticksPerWheel)
threadFactory
-一个ThreadFactory
,创建一个背景Thread
专用于TimerTask
执行。
tickDuration
- 勾号之间的时间间隔
unit
-所述的时间单位
tickDuration
ticksPerWheel
- 轮子的大小
java.lang.NullPointerException
- 如果
threadFactory
和
unit
任一个是
null
java.lang.IllegalArgumentException
- 如果
tickDuration
和
ticksPerWheel
<= 0
public HashedWheelTimer(java.util.concurrent.ThreadFactory threadFactory, long tickDuration, java.util.concurrent.TimeUnit unit, int ticksPerWheel, boolean leakDetection)
threadFactory
-一个ThreadFactory
,创建一个背景Thread
专用于TimerTask
执行。
tickDuration
- 勾号之间的持续时间
unit
-所述的时间单位
tickDuration
ticksPerWheel
- 轮子的大小
leakDetection
-
true
如果泄漏检测应始终启用,如果为false,则只有在辅助线程不是守护程序线程时才会启用泄漏检测。
java.lang.NullPointerException
- 如果
threadFactory
和
unit
是
null
java.lang.IllegalArgumentException
- 如果
tickDuration
和
ticksPerWheel
<= 0
public HashedWheelTimer(java.util.concurrent.ThreadFactory threadFactory, long tickDuration, java.util.concurrent.TimeUnit unit, int ticksPerWheel, boolean leakDetection, long maxPendingTimeouts)
threadFactory
-一个ThreadFactory
,创建一个背景Thread
专用于TimerTask
执行。
tickDuration
- 勾号之间的时间间隔
unit
-所述的时间单位
tickDuration
ticksPerWheel
- 轮子的大小
leakDetection
-
true
如果泄漏检测应始终启用,如果为false,则只有在辅助线程不是守护线程时才会启用泄漏检测。
maxPendingTimeouts
- 最大呼叫newTimeout
的挂起超时数将导致RejectedExecutionException
被抛出。
如果此值为0或负数,则不会假定最大待处理超时限制。
java.lang.NullPointerException
- 如果
threadFactory
和
unit
是
null
java.lang.IllegalArgumentException
- 如果
tickDuration
和
ticksPerWheel
任一个<= 0
protected void finalize() throws java.lang.Throwable
finalize
在课堂上
java.lang.Object
java.lang.Throwable
public void start()
java.lang.IllegalStateException
- 如果此计时器已经
stopped
public Timeout newTimeout(TimerTask task, long delay, java.util.concurrent.TimeUnit unit)
Timer
复制的描述
TimerTask
一次性执行。
newTimeout
接口
Timer
public long pendingTimeouts()
Timer
的暂挂超时数。
Copyright © 2008–2018 The Netty Project. All rights reserved.