办法一:一个排序双向链表 + 一个线程固定频率不断轮询
缺陷:
办法二:JDK自带的Timer

缺陷:
由于内部须要掩护DelayQueue排序行列步队,新增和删除任务韶光繁芜度O(log(n)),并不能满⾜Kafka的⾼性能哀求如果一个任务实行的韶光比较长,那在它后面的任务会被延迟实行办法三:韶光轮(kafka实现办法)
优点:用DelayQueue作为推进器,避免CPU的无效花费相同的延时时间任务存放在TimerTaskList,获取韶光繁芜度是O(1)
缺陷:实现繁芜
总结:
终极Kafka因此韶光轮的办法实现延时行列步队的,韶光轮的应⽤并⾮Kafka独占,在Netty、Doubbo、Zookeeper等组件中都存在韶光轮。底层使⽤数组实现,数组中的每个元素可以存放在⼀个TimerTaskList工具。TimerTaskList是⼀个环形双向链表,在个中的链表项TimerTaskEntry中封装了真正的定时任务TimerTask.