Java ScheduledExecutorService - 循环中的重叠

4

我的ScheduledExecutorService旨在每30分钟运行一次 - 每小时的开始和中间(09:00,09:30等)。当任务少于30分钟时,这个设置可以正常运行。

如果在一个周期的执行时间超过30分钟,我应该期望什么:

  1. 多个周期同时运行(例如 - 在09:00启动的周期可能在09:40完成,但另一个周期在09:30启动并且这两个周期并行运行)
  2. 整个每30分钟的执行计划现在将移动长周期的额外执行时间(例如 - 在09:00开始的周期可能在09:40结束,原本应该在09:30开始的周期将立即在09:40开始)。

非常感谢!


1
具体行为取决于它的调度方式。你能给我们展示一些代码吗?我期望它的行为像你的第二点描述的那样。如果任务执行时间超过周期,你想要的行为是什么? - Fildor
1个回答

7
有两种重复任务调度的选项:scheduleAtFixedRatescheduleWithFixedDelay。我假设你使用前者,因为这样更容易每30分钟触发一次。
在这种情况下,Javadocs上已经很清楚了:

如果此任务的任何执行时间超过其周期,则后续执行可能会延迟开始,但不会同时执行。

所以如果你的09:30任务需要33分钟,那么你的10:00任务将会推迟3分钟。

3
如果需要63分钟完成,就会连续运行3项任务而没有任何延迟! - Fildor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接