问答详情
源自:2-8 浅谈Scheduler

谁能告诉我这里为啥打印这么多次

https://img.mukewang.com/5ab79e5700019dd112140674.jpg

谁能告诉我这里为啥打印这么多次

提问者:肉食主义 2018-03-25 21:04

个回答

  • 杀猪儆驴攻城狮官博
    2021-08-05 22:18:17

    43秒启动的scheduler,每秒执行一次;
    2秒后scheduler被关闭,也就是说任务被触发的时间为:
    43秒,
    44秒,
    45秒,
    那么由于单个job中存在一个sleep(5s)的线程,那么job中打印时间应该为:
    48秒,
    49秒,
    50秒,
    观察结果却是:
    49秒,
    49秒,
    50秒,
    说明在43秒触发的任务,假设是43.999秒触发的,理论上应该在48.999秒打印job中的时间,但是由于每行程序执行都需要时间,假设为1ms,就导致第一次触发的任务在打印时间的时候已经到了49秒。
    自己在执行程序的时候把毫秒单位也打出来就容易理解了。
    同时可能quartz自己的执行机制,会把时间相近,比如相差五毫秒以内(推测)的两条任务同时执行,也就是说在同一毫秒精度执行。https://img4.mukewang.com/610bf32700010da710000775.jpg
    https://img.mukewang.com/610bf3270001dff710000783.jpg

  • java_stu
    2019-01-28 11:12:40

    因为线程睡眠了2秒,它会把睡眠的的这2秒需要执行的代码都补上

  • 追风筝的小徐
    2018-03-26 10:42:14

    設置的是每秒打印一次,但是為啥會重複一次49秒就不知道了