【发布时间】:2022-01-24 22:30:17
【问题描述】:
ScheduledExecutorService 在使用scheduleWithFixedDelay 或scheduleAtFixedRate 时未执行具有0 时间单位的initialDelay 提交的任务。但是当我在上面调用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
但是当我使用scheduleWithFixedDelay 或scheduleAtFixedRate 而不是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 时执行此任务
【问题讨论】:
-
不过,奇怪的是我在
scheduleWithFixedDelay或scheduleAtFixedRate中找不到任何异步调用ScheduledThreadPoolExecutor,这可能会导致这种情况发生。如果不是这种情况,那么在返回 API 调用之前执行任务必须有一些开销。 -
我认为zysaaa 的回答更接近这种情况
标签: java scheduledexecutorservice