Java ScheduledExecutorService.scheduleWithFixedDelay启动新线程以执行任务,而无需等待第一个任务完成

时间:2019-03-27 09:12:55

标签: java scheduling

我正在编写一段需要定期调度Runnable的代码。我正在使用ScheduledExecutorService.scheduleWithFixedDelay,初始延迟为0,延迟为2分钟。此SchedulerService中只有任务。我期望任务的第二次执行将在任务的第一次执行完成后2分钟开始。为了验证这一点,我在调试模式下启动了我的应用程序,并在Runnable Task的开始处放置了一个断点。第一个执行在断点处暂停,执行任务的线程进入挂起状态。令我惊讶的是,在第一次执行任务开始2分钟之后,SchedulerService启动了新线程来执行任务的第二次执行。我期望除非第一次执行完成,否则ScheduledExecutorService.scheduleWithFixedDelay不会开始第二次执行。请帮助我理解此行为,因为这与Javadoc对此方法的解释相矛盾。

1 个答案:

答案 0 :(得分:0)

线程数是可控制的。可以启动单线程执行程序。 ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();