xxl-job 里定时任务触发实现疑问

2022-09-29 17:52:37 +08:00
 rqxiao

今天在想 java 中的定时任务的功能是怎么实现的?

先看了 ScheduledExecutorService ,里面的实现简单的理解是 DelayQueue 死循环调用 Condition 类的 await(),等待时间结束后,return q.poll(,完成了延时的定时执行?

又想看下之前工作中了解过的 xxl-job 是怎么完成的,源码看不懂,这篇文章解释了一下,https://zhuanlan.zhihu.com/p/356696236 可以理解为死循环中有个线程不断的再查数据库的 xxl-job 中 5 秒内需要执行的任务,然后判断,定时任务一般是这么实现的吗

1621 次点击
所在节点    Java
3 条回复
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}
轮训找任务并分发出去,计算下一次执行时间就完事了。
Red998
2022-09-30 12:05:12 +08:00
是的 我也看了点源码 就是扫描表来去分发的
tedzhou1221
2022-10-07 00:21:27 +08:00
查数据库,这样做是为了故障时任务数据的恢复。把任务放到时间轮,是为了任务的执行时间更准时和减少查询数据库的次数。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/883875

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX