我在ScheduledExecutorService
中安排了一些任务。在关机时,我想取消它们,并在它们全部完成后释放数据库锁。
如何等待已取消的任务完成处理?
<试图解决方案/strong>
- 根据我的测试,在任务停止执行之前,
- 在
future.cancel()
之后调用future.get()
导致立即CancelledExecutionException - 我不想等待整个执行器关闭,因为它是在组件之间共享的
future.cancel()
不会阻塞。如何等待已取消的任务完成处理?
这样做的问题是取消是在尽最大努力的基础上完成的。javadoc声明
尝试取消该任务的执行。如果……这次尝试将会失败任务已经完成、已经取消或可能取消不能因为其他原因取消。
通常,取消是通过中断实现的,而中断是一种约定。没有什么能保证它会被正确地实现。因此,即使你发送了cancel
,也不能保证底层任务(如果已经运行)会完成取消。
没有可靠的方法来实现你的用例