一個Hash Wheel Timer是一個環形結構,能夠想象成時鐘,分爲不少格子,一個格子表明一段時間(越短Timer精度越高),並用一個List保存在該格子上到期的全部任務,同時一個指針隨着時間流逝一格一格轉動,並執行對應List中全部到期的任務。
這個類通常用來處理大量的定時任務且任務對時間精度要求相對不高, 好比連接超時管理等場景, 缺點是, 內存佔用相對較高.該類中有兩個重要的參數
Tick Duration:即一個格子表明的時間,默認爲100ms,由於IO事件不須要那麼精確;java
Ticks per Wheel (Wheel Size):一個Wheel含有多少個格子,默認爲512個,若是任務較多能夠增大這個參數.ide
public class HashedWhellTimerTest { static Timer timer = new HashedWheelTimer(50L,TimeUnit.MILLISECONDS,512); public static void main(String[] args) { TimerTask task = new TimerTask() { @Override public void run(Timeout timeout) throws Exception { System.out.println("---run service-----"); //任務執行完成後再把本身添加到任務solt上 addTask(this); } }; addTask(task); } public static void addTask(TimerTask task){ //根據時長把task任務放到響應的solt上 timer.newTimeout(task,2,TimeUnit.SECONDS); } }
參考:this
https://blog.csdn.net/wangyang_software/article/details/54135704.net
https://blog.csdn.net/nmgrd/article/details/77199666指針