一个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指针