ScheduledExecutorService:我如何等待已取消的任务完成?

时间:2015-10-14 17:02:47

标签: java scheduledexecutorservice

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

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

尝试解决方案

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

1 个答案:

答案 0 :(得分:1)

  

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

问题在于取消是在尽力而为的基础上完成的。 javadoc

  

尝试取消执行此任务。如果这种尝试失败了   任务已经完成,已经取消,或者可以   不能因其他原因而取消。

通常,取消是通过中断实现的,而中断是一种惯例。没有什么能保证它能够正确实施。因此,即使您发送cancel,也不能保证基础任务(如果已经运行)将完成取消。

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