时间轮类似于钟表,上面有时分秒的刻度,秒针一秒一秒的跳,对应到秒级任务,如果刻度跨度为毫秒则可以实现毫秒调度 。每一个刻度后面都连接着当前秒应该执行的任务,系统每次都调度当前时间指针下的任务 。其数据结构就可以看成「数组+链表」的实现,时间轮是一种算法思想,在各开发语言中没有对应的实现,HashMap、Dict 也可以满足要求 。XXL-JOB 就是使用的 ConcurrentHashMap<Integer,List<Integer>> 。时间轮相比于 DelayQueue 怎么样呢,又存在哪些问题,该怎么解决呢?
- 有序性
- 线程安全
- 避免空轮询
- 任务去重
- 时间轮实现
当任务数=0 时,调用 condition.await() take 被阻塞,当元素个数从无变成有的时候,调用 condition.signal(),也是一个典型的生产者消费者模型 。

文章插图

文章插图
某资料上就用这种设计做出了监控10亿级定时任务检测系统,时间轮是一种设计方式,非特定的数据结构,除了性能好之外其扩展性也是非常好的 。

文章插图
欢迎关注公众号:看起来很美(kanqilaihenmei_)
-- 完 --
推荐阅读
- 内网渗透之向日葵帮我干掉了杀软
- 定时任务调度系统搭建
- 音视频处理之FFmpeg+SDL视频播放器
- 忽必烈是怎么当上大汗的,忽必烈之前的蒙古大汗
- 汉武帝和汉景帝汉文帝之间的关系,汉文帝与汉景帝统治时期被称作什么
- 刘备离开袁绍之后投奔了谁,袁绍和刘备是什么关系
- 唐朝安史之乱后形成了怎样的局面,唐朝为什么会爆发安史之乱
- 元神忍冬之果,原神忍冬之果突破材料详解
- 台湾博物馆三大镇馆之宝是什么?
- 明宪宗之后,明宪宗知乎
