今天在想 java 中的定时任务的功能是怎么实现的?
先看了 ScheduledExecutorService ,里面的实现简单的理解是 DelayQueue 死循环调用 Condition 类的 await(),等待时间结束后,return q.poll(,完成了延时的定时执行?
又想看下之前工作中了解过的 xxl-job 是怎么完成的,源码看不懂,这篇文章解释了一下,https://zhuanlan.zhihu.com/p/356696236 可以理解为死循环中有个线程不断的再查数据库的 xxl-job 中 5 秒内需要执行的任务,然后判断,定时任务一般是这么实现的吗
1
wolfie 2022-09-29 18:04:04 +08:00
xxl-job 跟 DelayQueue 有啥联系吗?
通过 SQL:from xxl_job_info where trigger_status = 1 and trigger_next_time <= #{maxNextTime} 轮训找任务并分发出去,计算下一次执行时间就完事了。 |
2
Red998 2022-09-30 12:05:12 +08:00
是的 我也看了点源码 就是扫描表来去分发的
|
3
tedzhou1221 2022-10-07 00:21:27 +08:00 via iPhone
查数据库,这样做是为了故障时任务数据的恢复。把任务放到时间轮,是为了任务的执行时间更准时和减少查询数据库的次数。
|