ScheduledExecutorService:如何等待被取消的任务完成



我在ScheduledExecutorService中安排了一些任务。在关机时,我想取消它们,并在它们全部完成后释放数据库锁。

如何等待已取消的任务完成处理?

<

试图解决方案/strong>

    根据我的测试,在任务停止执行之前,future.cancel()不会阻塞。
  • future.cancel()之后调用future.get()导致立即CancelledExecutionException
  • 我不想等待整个执行器关闭,因为它是在组件之间共享的

如何等待已取消的任务完成处理?

这样做的问题是取消是在尽最大努力的基础上完成的。javadoc声明

尝试取消该任务的执行。如果……这次尝试将会失败任务已经完成、已经取消或可能取消不能因为其他原因取消。

通常,取消是通过中断实现的,而中断是一种约定。没有什么能保证它会被正确地实现。因此,即使你发送了cancel,也不能保证底层任务(如果已经运行)会完成取消。

没有可靠的方法来实现你的用例

最新更新