Java ScheduledExecutorService - 循环重叠

use*_*839 4 java scheduledexecutorservice

我的 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)。

非常感谢 !

Dun*_*nes 7

有两种安排重复任务的选项:scheduleAtFixedRatescheduleWithFixedDelay。我假设你在做前者,因为每 30 分钟触发一次会容易得多。

在这种情况下,关于此的 Javadoc 非常清楚:

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

因此,如果您 09:30 的任务需要 33 分钟,那么您 10:00 的任务将延迟 3 分钟。

  • ...如果需要 63 分钟,那么将有 3 个任务连续运行,没有任何延迟! (3认同)