java重新启动ScheduledExecutorService计划任务的正确方法是什么?
我有一个计划任务(在固定延迟执行中运行),启动方式如下:
executoreService.scheduleWithFixedDelay(repeatingThread, 0, numOfSeconds, TimeUnit.SECONDS);
每次循环开始时,我都会检查设置文件中的更改,然后我想重新启动任务。设置文件还包含间隔的长度(numOfSeconds
在上面的代码中)
目前,我正在使用以下代码重新启动任务:
executoreService.shutdownNow();
try {
while(!executoreService.awaitTermination(5, TimeUnit.SECONDS)){
logger.debug("awaiting termintation");
}
} catch (InterruptedException e) {
logger.debug("interrupted, continuing", e);
}
// initialize startup parameters
init();
// start the main scheduled timer
executoreService.scheduleWithFixedDelay(repeatingThread, 0, numOfSeconds, TimeUnit.SECONDS);
我不确定这些API调用。建议以什么方式重新启动任务(可能会有新的延迟)
# 1 楼答案
不,您不想或不需要仅仅为了修改一项任务而关闭整个服务。而是使用从服务获得的ScheduledFuture对象取消任务,然后计划一个新任务
或者,为什么不使用新设置或参数更新repeatingThread中的状态呢?如果你不需要新的延迟,甚至不需要重新安排