如何解决如何更新执行程序时间?
我正在使用 Java 开发 executorService。如果时间未到,必须更新执行器延迟并删除旧的。`
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 引起”之类的错误,我该如何正确完成此任务?
解决方法
当您中断在 I/O 请求中阻塞的任务时,会发生 ClosedByInterruptException
。在这种情况下,它会发生因为您在执行程序上调用 shutdownNow
。 (调用 shutdownNow
被指定为在所有仍在执行某事的执行程序的工作线程上调用 Thread.interrupt()
。)
所以……
-
如果您不想要例外,则不应调用
shutdownNow
。相反,调用shutdown
并让执行程序继续当前的Task
直到它完成。 -
如果您希望任务立即停止,请像当前一样调用
shutdownNow
,并重新编码Task
对象,以便它在被中断的情况下进行复制。例如,Task
需要以适当的方式处理该异常。
鉴于您确实希望任务立即停止……问题不在于您向我们展示的代码。问题在于 Task
的代码没有正确处理中断的后果。但是我们可以告诉您如何在没有看到的情况下修复 Task
代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。