- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
ScheduledExecutorService
在使用 scheduleWithFixedDelay
或 时,
。但是当我调用 initialDelay
未执行提交的任务 0
时间单位>scheduleAtFixedRateschedule
时它正在执行任务在上面
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
最佳答案
背后的原因可以在ScheduledThreadPoolExecutor
中找到,它是Executors.newSingleThreadScheduledExecutor()
的实现类
schedule
时执行,这是由于executeExistingDelayedTasksAfterShutdown is true by default
/**
* False if should cancel non-periodic not-yet-expired tasks on shutdown.
*/
private volatile boolean executeExistingDelayedTasksAfterShutdown = true;
scheduleWithFixedDelay
或 scheduleAtFixedRate
这是由于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/
更新(2019 年 11 月 21 日) WorkManager.getInstance(activity).enqueueUniquePeriodicWork("test_work",
我有一个使用 Observable.interval(POLL_INTERVAL, Seconds) 实现的轮询服务。这工作正常,但我希望第一个延迟为 0,我的意思是我想立即开始轮询,然后继续轮询每个
ScheduledExecutorService 在使用 scheduleWithFixedDelay 或 时,initialDelay 未执行提交的任务 0 时间单位>scheduleAtFixed
我正在使用 Java 开发一个调度系统,它根据 startDate、endDate 和occurrence(每小时、每天、每周、每月、星期一等)。最初我使用 Timer 和 TimerTask 类来安
我是一名优秀的程序员,十分优秀!