我正在安排一个任务:
ScheduledExecutorService dataService = Executors.newScheduledThreadPool(1);
Future<?> dataTimerHandle = dataService.scheduleAtFixedRate(runnable, 100, freq, TimeUnit.MILLISECONDS);
这段代码一开始能够正常运行。
但是,当用户操作中某个标志变为true
时,任务不再需要定期执行,而只需执行一次。此时,我尝试按照以下方式取消任务并仅提交一次:
if(!dynamicUpdate) {
dataTimerHandle.cancel(true);
dataTimerHandle = dataService.submit(runnable);
}
else { //Reschedule again:
dataTimerHandle = dataService.scheduleAtFixedRate(runnable, 100, freq, TimeUnit.MILLISECONDS);
}
但似乎可运行对象仍按照周期执行,cancel()
没有按预期工作。是否有其他替代策略?