Java取消未来 - 如何等待完成?

mdz*_*dzh 8 java future futuretask

长话短说:我有一个Future对象的集合.其中一些已经在进行中,有些则没有.我迭代收集并调用future.cancel(false),根据文档,应该取消所有Future当前没有运行但应该允许所有其他人完成的.

我的问题是:Future在我打电话后,我怎么知道特定的什么时候完成future.cancel(false)future.isDone()总是返回,true因为cancel()在此之前确实被调用,并且即使仍在运行,也future.get()总是抛出一个.CancellationExceptionFuture

有什么建议?

Mar*_*nik 1

由于Future对待处理计算的未来结果进行建模,并且该结果不是来自取消的未来,因此合理的是Future您无法确定结果已被处理的计算何时完成,这是合理的。换句话说,您需要另一种范例来通过该方法实现您的目标。

如果您希望等待所有提交的任务完成,Executor Service API 直接支持的最接近的事情就是关闭整个 executor 服务并等待其终止。

如果上述内容不适合您的解决方案,那么我没有看到比某些自定义解决方案更好的方法,例如 的自定义实现Runnable,它会在侧面执行一些内务处理,以便您可以检查它何时完成运行。