Skip to content

jmliubiao/scheduledtask

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

这是一个手写定时任务项目,通过动手实践来真正掌握一项技能。

v1 版本的实现比较简单

1、schedule() - 调度方法,提交延迟执行的任务

2、Trigger类 - 使用PriorityBlockingQueue优先队列存储任务,按执行时间排序

3、工作线程 - 在Trigger构造块中启动,不断检查并执行到期的任务

4、线程池 - 使用10个线程的固定线程池执行实际任务

优先队列采用二叉堆实现

时间复杂度:

插入:O(log n)

删除最大/最小元素:O(log n)

获取最大/最小元素:O(1)

优点:实现简单,性能稳定

缺点: 优先队列只适合小规模(几千级别)、简单延迟任务的场景,但对于大规模(万级以上)、复杂调度需求。

执行流程如下: 1.png

v2版本底层使用的时间轮来现实,适合大规模的任务调试需求。缺点是存在延时。

1、TimerWheel - 主类,包含:

10个槽位的环形数组(wheel)

Ticker线程负责推进时间

ExecutorService线程池执行任务

2、DelayTask - 延迟任务类

包含Runnable任务和截止时间(deadline)

双向链表结构(next/pre指针)

3、MpscTaskQueue - 多生产者单消费者队列

使用AtomicReference实现无锁并发

每个槽位对应一个队列

执行流程如下: 2.png

3.png

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages