【发布时间】:2015-11-03 21:36:51
【问题描述】:
invokeAll(): 执行给定的任务,当所有任务完成时返回一个包含状态和结果的 Futures 列表。Future.isDone()对于返回列表的每个元素都为真。请注意,已完成的任务可能已经正常终止,也可能通过引发异常终止。如果在此操作进行时修改了给定的集合,则此方法的结果是不确定的。
CompletableFuture 还使用以下策略实现 Future:
由于(与
FutureTask不同)此类无法直接控制导致其完成的计算,因此取消被视为另一种形式的异常完成。方法取消与completeExceptionally(new CancellationException())的效果相同。方法isCompletedExceptionally()可用于确定CompletableFuture是否以任何异常方式完成。如果使用
CompletionException异常完成,方法get()和get(long, TimeUnit)会抛出一个ExecutionException,原因与对应的CompletionException中的原因相同。为了在大多数情况下简化使用,该类还定义了方法join()和getNow(T),在这些情况下直接抛出CompletionException。
有什么区别
invokeAll()和Future
CompletableFuture
既然JDK 1.7不支持CompletableFuture,那么invokeAll()和Future能达到同样的效果吗?
【问题讨论】:
-
感谢您的反馈。更正了问题。
-
CompletableFuture只是提供了对结果进行异步操作的可能性。Future没有。 -
我现在已经检查了这个问题。该问题将 1.7 代码转换为 1.8 兼容代码。我正在寻找使用 1.7 代码实现 1.8 功能,因为我无法将 JDK 升级到 1.8
-
抱歉,误读了。简单回答是不。您需要类似于
CompletableFuture的内容来添加该行为。 Guava 提供ListenableFuture。转换与上一篇文章中的相同。见here。
标签: java multithreading concurrency