Class HashedWheelTimer
java.lang.Object
org.jboss.netty.util.HashedWheelTimer
- All Implemented Interfaces:
Timer
A
Timer optimized for approximated I/O timeout scheduling.
Tick Duration
As described with 'approximated', this timer does not execute the scheduledTimerTask on time. HashedWheelTimer, on every tick, will
check if there are any TimerTasks behind the schedule and execute
them.
You can increase or decrease the accuracy of the execution timing by specifying smaller or larger tick duration in the constructor. In most network applications, I/O timeout does not need to be accurate. Therefore, the default tick duration is 100 milliseconds and you will not need to try different configurations in most cases.
Ticks per Wheel (Wheel Size)
HashedWheelTimer maintains a data structure called 'wheel'.
To put simply, a wheel is a hash table of TimerTasks whose hash
function is 'dead line of the task'. The default number of ticks per wheel
(i.e. the size of the wheel) is 512. You could specify a larger value
if you are going to schedule a lot of timeouts.
Do not create many instances.
HashedWheelTimer creates a new thread whenever it is instantiated and
started. Therefore, you should make sure to create only one instance and
share it across your application. One of the common mistakes, that makes
your application unresponsive, is to create a new instance in
ChannelPipelineFactory, which results in the creation of a new thread
for every connection.
Implementation Details
HashedWheelTimer is based on
George Varghese and
Tony Lauck's paper,
'Hashed
and Hierarchical Timing Wheels: data structures to efficiently implement a
timer facility'. More comprehensive slides are located
here.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static final classBucket that stores HashedWheelTimeouts.private static final classprivate final class -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final AtomicInteger(package private) static final InternalLoggerprivate final intprivate static final SharedResourceMisuseDetectorprivate longprivate final CountDownLatchprivate final longprivate final Queue<HashedWheelTimer.HashedWheelTimeout> private final HashedWheelTimer.HashedWheelBucket[]private final HashedWheelTimer.Workerstatic final intstatic final intstatic final intprivate static final AtomicIntegerFieldUpdater<HashedWheelTimer> private intprivate final Thread -
Constructor Summary
ConstructorsConstructorDescriptionCreates a new timer with the default thread factory (Executors.defaultThreadFactory()), default tick duration, and default number of ticks per wheel.HashedWheelTimer(long tickDuration, TimeUnit unit) Creates a new timer with the default thread factory (Executors.defaultThreadFactory()) and default number of ticks per wheel.HashedWheelTimer(long tickDuration, TimeUnit unit, int ticksPerWheel) Creates a new timer with the default thread factory (Executors.defaultThreadFactory()).HashedWheelTimer(ThreadFactory threadFactory) Creates a new timer with the default tick duration and default number of ticks per wheel.HashedWheelTimer(ThreadFactory threadFactory, long tickDuration, TimeUnit unit) Creates a new timer with the default number of ticks per wheel.HashedWheelTimer(ThreadFactory threadFactory, long tickDuration, TimeUnit unit, int ticksPerWheel) Creates a new timer.HashedWheelTimer(ThreadFactory threadFactory, ThreadNameDeterminer determiner, long tickDuration, TimeUnit unit, int ticksPerWheel) Creates a new timer. -
Method Summary
Modifier and TypeMethodDescriptionprivate static HashedWheelTimer.HashedWheelBucket[]createWheel(int ticksPerWheel) newTimeout(TimerTask task, long delay, TimeUnit unit) Schedules the specifiedTimerTaskfor one-time execution after the specified delay.private static intnormalizeTicksPerWheel(int ticksPerWheel) voidstart()Starts the background thread explicitly.stop()Releases all resources acquired by thisTimerand cancels all tasks which were scheduled but not executed yet.
-
Field Details
-
logger
-
id
-
misuseDetector
-
WORKER_STATE_UPDATER
-
worker
-
workerThread
-
WORKER_STATE_INIT
public static final int WORKER_STATE_INIT- See Also:
-
WORKER_STATE_STARTED
public static final int WORKER_STATE_STARTED- See Also:
-
WORKER_STATE_SHUTDOWN
public static final int WORKER_STATE_SHUTDOWN- See Also:
-
workerState
private volatile int workerState -
tickDuration
private final long tickDuration -
wheel
-
mask
private final int mask -
startTimeInitialized
-
timeouts
-
startTime
private volatile long startTime
-
-
Constructor Details
-
HashedWheelTimer
public HashedWheelTimer()Creates a new timer with the default thread factory (Executors.defaultThreadFactory()), default tick duration, and default number of ticks per wheel. -
HashedWheelTimer
Creates a new timer with the default thread factory (Executors.defaultThreadFactory()) and default number of ticks per wheel.- Parameters:
tickDuration- the duration between tickunit- the time unit of thetickDuration
-
HashedWheelTimer
Creates a new timer with the default thread factory (Executors.defaultThreadFactory()).- Parameters:
tickDuration- the duration between tickunit- the time unit of thetickDurationticksPerWheel- the size of the wheel
-
HashedWheelTimer
Creates a new timer with the default tick duration and default number of ticks per wheel.- Parameters:
threadFactory- aThreadFactorythat creates a backgroundThreadwhich is dedicated toTimerTaskexecution.
-
HashedWheelTimer
Creates a new timer with the default number of ticks per wheel.- Parameters:
threadFactory- aThreadFactorythat creates a backgroundThreadwhich is dedicated toTimerTaskexecution.tickDuration- the duration between tickunit- the time unit of thetickDuration
-
HashedWheelTimer
public HashedWheelTimer(ThreadFactory threadFactory, long tickDuration, TimeUnit unit, int ticksPerWheel) Creates a new timer.- Parameters:
threadFactory- aThreadFactorythat creates a backgroundThreadwhich is dedicated toTimerTaskexecution.tickDuration- the duration between tickunit- the time unit of thetickDurationticksPerWheel- the size of the wheel
-
HashedWheelTimer
public HashedWheelTimer(ThreadFactory threadFactory, ThreadNameDeterminer determiner, long tickDuration, TimeUnit unit, int ticksPerWheel) Creates a new timer.- Parameters:
threadFactory- aThreadFactorythat creates a backgroundThreadwhich is dedicated toTimerTaskexecution.determiner- thread name determiner to control thread name.tickDuration- the duration between tickunit- the time unit of thetickDurationticksPerWheel- the size of the wheel
-
-
Method Details
-
createWheel
-
normalizeTicksPerWheel
private static int normalizeTicksPerWheel(int ticksPerWheel) -
start
public void start()Starts the background thread explicitly. The background thread will start automatically on demand even if you did not call this method.- Throws:
IllegalStateException- if this timer has been stopped already
-
stop
-
newTimeout
-