加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 重新启动ScheduledExecutorService计划任务的正确方法是

发布时间:2020-12-14 05:29:32 所属栏目:Java 来源:网络整理
导读:我有一个计划的任务(以固定延迟执行运行),开始如下: executoreService.scheduleWithFixedDelay(repeatingThread,numOfSeconds,TimeUnit.SECONDS); 在每个循环开始时,我检查设置文件中的更改,然后我要重新启动任务.设置文件还包含间隔的长度(上述代码中的num
我有一个计划的任务(以固定延迟执行运行),开始如下:
executoreService.scheduleWithFixedDelay(repeatingThread,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,TimeUnit.SECONDS);

我不确定这些API调用.什么是重新启动任务的推荐方法(可能会有新的延迟)?

解决方法

不,您不想或需要关闭整个服务只是为了修改一个任务.而是使用从服务获得的ScheduledFuture对象来取消任务,然后安排一个新的.
ScheduledFuture<?> future = executorService.scheduleWithFixedDelay(repeatingThread,TimeUnit.SECONDS);
...
// to cancel it:
future.cancel(true);
// then schedule again

或者,为什么不用updateThread更新新的设置或参数的状态?它甚至不需要重新安排,如果你不需要新的延迟.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读