这是一个手写定时任务项目,通过动手实践来真正掌握一项技能。
v1 版本的实现比较简单
1、schedule() - 调度方法,提交延迟执行的任务
2、Trigger类 - 使用PriorityBlockingQueue优先队列存储任务,按执行时间排序
3、工作线程 - 在Trigger构造块中启动,不断检查并执行到期的任务
4、线程池 - 使用10个线程的固定线程池执行实际任务
优先队列采用二叉堆实现
时间复杂度:
插入:O(log n)
删除最大/最小元素:O(log n)
获取最大/最小元素:O(1)
优点:实现简单,性能稳定
缺点: 优先队列只适合小规模(几千级别)、简单延迟任务的场景,但对于大规模(万级以上)、复杂调度需求。
v2版本底层使用的时间轮来现实,适合大规模的任务调试需求。缺点是存在延时。
1、TimerWheel - 主类,包含:
10个槽位的环形数组(wheel)
Ticker线程负责推进时间
ExecutorService线程池执行任务
2、DelayTask - 延迟任务类
包含Runnable任务和截止时间(deadline)
双向链表结构(next/pre指针)
3、MpscTaskQueue - 多生产者单消费者队列
使用AtomicReference实现无锁并发
每个槽位对应一个队列


