类 HashedWheelTimer

java.lang.Object
org.dromara.dynamictp.common.timer.HashedWheelTimer
所有已实现的接口:
Timer

public class HashedWheelTimer extends Object implements Timer
A Timer optimized for approximated I/O timeout scheduling.

Tick Duration

As described with 'approximated', this timer does not execute the scheduled TimerTask 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 'deadline 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 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.

Copy from dubbo, see here for more 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

      public HashedWheelTimer(long tickDuration, TimeUnit unit)
      Creates a new timer with the default thread factory (Executors.defaultThreadFactory()) and default number of ticks per wheel.
      参数:
      tickDuration - the duration between tick
      unit - the time unit of the tickDuration
      抛出:
      NullPointerException - if unit is null
      IllegalArgumentException - if tickDuration is <= 0
    • HashedWheelTimer

      public HashedWheelTimer(long tickDuration, TimeUnit unit, int ticksPerWheel)
      Creates a new timer with the default thread factory (Executors.defaultThreadFactory()).
      参数:
      tickDuration - the duration between tick
      unit - the time unit of the tickDuration
      ticksPerWheel - the size of the wheel
      抛出:
      NullPointerException - if unit is null
      IllegalArgumentException - if either of tickDuration and ticksPerWheel is <= 0
    • HashedWheelTimer

      public HashedWheelTimer(ThreadFactory threadFactory)
      Creates a new timer with the default tick duration and default number of ticks per wheel.
      参数:
      threadFactory - a ThreadFactory that creates a background Thread which is dedicated to TimerTask execution.
      抛出:
      NullPointerException - if threadFactory is null
    • HashedWheelTimer

      public HashedWheelTimer(ThreadFactory threadFactory, long tickDuration, TimeUnit unit)
      Creates a new timer with the default number of ticks per wheel.
      参数:
      threadFactory - a ThreadFactory that creates a background Thread which is dedicated to TimerTask execution.
      tickDuration - the duration between tick
      unit - the time unit of the tickDuration
      抛出:
      NullPointerException - if either of threadFactory and unit is null
      IllegalArgumentException - if tickDuration is <= 0
    • HashedWheelTimer

      public HashedWheelTimer(ThreadFactory threadFactory, long tickDuration, TimeUnit unit, int ticksPerWheel)
      Creates a new timer.
      参数:
      threadFactory - a ThreadFactory that creates a background Thread which is dedicated to TimerTask execution.
      tickDuration - the duration between tick
      unit - the time unit of the tickDuration
      ticksPerWheel - the size of the wheel
      抛出:
      NullPointerException - if either of threadFactory and unit is null
      IllegalArgumentException - if either of tickDuration and ticksPerWheel is <= 0
    • HashedWheelTimer

      public HashedWheelTimer(ThreadFactory threadFactory, long tickDuration, TimeUnit unit, int ticksPerWheel, long maxPendingTimeouts)
      Creates a new timer.
      参数:
      threadFactory - a ThreadFactory that creates a background Thread which is dedicated to TimerTask execution.
      tickDuration - the duration between tick
      unit - the time unit of the tickDuration
      ticksPerWheel - the size of the wheel
      maxPendingTimeouts - The maximum number of pending timeouts after which call to newTimeout will result in RejectedExecutionException being thrown. No maximum pending timeouts limit is assumed if this value is 0 or negative.
      抛出:
      NullPointerException - if either of threadFactory and unit is null
      IllegalArgumentException - if either of tickDuration and ticksPerWheel is <= 0
  • 方法详细资料

    • finalize

      protected void finalize() throws Throwable
      覆盖:
      finalize 在类中 Object
      抛出:
      Throwable
    • 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.
      抛出:
      IllegalStateException - if this timer has been stopped already
    • stop

      public Set<Timeout> stop()
      从接口复制的说明: Timer
      Releases all resources acquired by this Timer and cancels all tasks which were scheduled but not executed yet.
      指定者:
      stop 在接口中 Timer
      返回:
      the handles associated with the tasks which were canceled by this method
    • isStop

      public boolean isStop()
      从接口复制的说明: Timer
      the timer is stop
      指定者:
      isStop 在接口中 Timer
      返回:
      true for stop
    • newTimeout

      public Timeout newTimeout(TimerTask task, long delay, TimeUnit unit)
      从接口复制的说明: Timer
      Schedules the specified TimerTask for one-time execution after the specified delay.
      指定者:
      newTimeout 在接口中 Timer
      参数:
      task - the task to execute
      delay - the time from now to delay execution
      unit - the time unit of the delay parameter
      返回:
      a handle which is associated with the specified task
    • pendingTimeouts

      public long pendingTimeouts()
      返回:
      the number of pending timeouts of this Timer.