gpt4 book ai didi

java - ScheduledExecutorService 不执行具有 initialDelay 0 的任务

转载 作者:行者123 更新时间:2023-12-05 04:39:08 26 4
gpt4 key购买 nike

ScheduledExecutorService 在使用 scheduleWithFixedDelay 时,initialDelay 未执行提交的任务 0 时间单位>scheduleAtFixedRate。但是当我调用 schedule 时它正在执行任务在上面

ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
Runnable runnable = () -> System.out.println("I am a runnable");
scheduledExecutorService.schedule(runnable, 0, TimeUnit.SECONDS);
scheduledExecutorService.shutdown();

输出

I am a runnable

但是当我使用 scheduleWithFixedDelayscheduleAtFixedRate 而不是 schedule 时,任务没有被执行。

ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
Runnable runnable = () -> System.out.println("I am a runnable");
scheduledExecutorService.scheduleWithFixedDelay(runnable, 0, 1, TimeUnit.SECONDS);
// or scheduledExecutorService.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);
scheduledExecutorService.shutdown();

为什么在这种情况下没有执行任务?我预计此任务将在 initialDelay 设置为 0

时执行

最佳答案

背后的原因可以在ScheduledThreadPoolExecutor中找到,它是Executors.newSingleThreadScheduledExecutor()的实现类

1。任务在调用schedule时执行,

这是由于executeExistingDelayedTasksAfterShutdown is true by default

    /**
* False if should cancel non-periodic not-yet-expired tasks on shutdown.
*/
private volatile boolean executeExistingDelayedTasksAfterShutdown = true;

2。 scheduleWithFixedDelayscheduleAtFixedRate

未执行任务

这是由于continueExistingPeriodicTasksAfterShutdown is false by default

    /**
* False if should cancel/suppress periodic tasks on shutdown.
*/
private volatile boolean continueExistingPeriodicTasksAfterShutdown;

我们可以通过 ScheduledThreadPoolExecutor#setExecuteExistingDelayedTasksAfterShutdownPolicy 覆盖这些参数和 ScheduledThreadPoolExecutor#setContinueExistingPeriodicTasksAfterShutdownPolicy在安排任务之前。

关于java - ScheduledExecutorService 不执行具有 initialDelay 0 的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70470394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com