首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新executor时间?

如何更新executor时间?
EN

Stack Overflow用户
提问于 2021-04-19 21:55:24
回答 1查看 45关注 0票数 0

我正在用Java语言开发executorService。如果时间未到,则必须更新执行程序延迟,并且必须删除较早的延迟。

代码语言:javascript
复制
Duration timeFromLast = Duration.between(this.lastTime, LocalDateTime.now());
Duration check = Duration.ofMillis(100);
Duration durationTillCheck = check.minus(timeFromLast);
if(durationTillCheck.toMillis()<0)
{
    if(!executor.isShutdown())//
    {
        executor.shutdownNow();
        executor = Executors.newSingleThreadScheduledExecutor();
    }
    executor.schedule(Task, 100, TimeUnit.MILLISECONDS);
}

但是有时候会出现像“由ClosedByInterruptException引起”这样的错误,我该如何正确地完成这个任务呢?

EN

回答 1

Stack Overflow用户

发布于 2021-04-20 17:17:58

当您中断在I/O请求中被阻塞的任务时,就会发生ClosedByInterruptException。在本例中,它将会发生,因为您正在对executor调用shutdownNow。(调用shutdownNow被指定为在仍在执行某些操作的所有executor的工作线程上调用Thread.interrupt()。)

所以..。

  • 如果你不想要异常,就不应该调用shutdownNow。而是调用shutdown并让执行器继续执行当前的Task,直到它完成为止。

  • 如果您希望任务立即停止,则像您当前所做的那样调用shutdownNow,并重新编码Task对象,以便它在被中断时进行复制。例如,Task将需要处理该异常...以适当的方式。

假设您确实希望任务现在停止...问题不在您向我们展示的代码中。问题出在Task的代码中,它没有正确处理中断的后果。但是我们可以告诉你如何修复Task代码,而不是看它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67163397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档