V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rqxiao
V2EX  ›  Java

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

  •  
  •   rqxiao · 2022-09-29 17:52:37 +08:00 · 1807 次点击
    这是一个创建于 794 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    3 条回复    2022-10-07 00:21:27 +08:00
    wolfie
        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}
    轮训找任务并分发出去,计算下一次执行时间就完事了。
    Red998
        2
    Red998  
       2022-09-30 12:05:12 +08:00
    是的 我也看了点源码 就是扫描表来去分发的
    tedzhou1221
        3
    tedzhou1221  
       2022-10-07 00:21:27 +08:00 via iPhone
    查数据库,这样做是为了故障时任务数据的恢复。把任务放到时间轮,是为了任务的执行时间更准时和减少查询数据库的次数。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2868 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:29 · PVG 20:29 · LAX 04:29 · JFK 07:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.