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

非常感谢 !

4

1 回答 1

7

调度重复任务有两个选项:scheduleAtFixedRatescheduleWithFixedDelay。我假设您正在执行前者,因为每 30 分钟触发一次要容易得多。

在这种情况下,这方面的 Javadocs 非常清楚:

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

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

于 2014-08-21T06:48:10.713 回答