【发布时间】:2018-02-25 13:50:52
【问题描述】:
这段代码对CompletableFuture.allOf(...)的使用是否有效
CompletableFuture<String> f1 = CompletableFuture.supplyAsync(() -> "f1");
CompletableFuture<String> f2 = CompletableFuture.supplyAsync(() -> "f2");
CompletableFuture<String> f3 = f1.thenCombineAsync(f2, (s1, s2) -> s1 + s2);
CompletableFuture<Void> all = CompletableFuture.allOf(f1, f2, f3);
all.join();
在 javadoc 中:
此方法的应用之一是等待完成一个集合 在继续一个程序之前独立的 CompletableFutures,如:
CompletableFuture.allOf(c1, c2, c3).join();.
但是我的例子中的依赖参数呢?如果它不是有效的例子,会出现什么问题以及为什么?
更新:也许这对某人有帮助,这个故事以 jdk-8 中的 bug 结尾 https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8200347#
【问题讨论】:
-
你可以认为
allOf只是被阻止,直到所有通过的CompletableFutures 都完成。 -
@holi-java 所以,你是说它的有效用法?我之所以问这个问题,是因为我有更复杂的示例,有时 join 在 allOf 上被永久阻止,而传递给 allOf 的所有可完成期货都处于已完成状态。所以我试图不理解我对 allOf 的使用是否被允许并且它不是 jdk 文档中的直接答案
-
如果您对
allOf()有疑问,您应该发布一个minimal reproducible example 来重现它。否则,“是的,它是有效的”答案将无济于事。 -
您不太正确,因为我不确定是“allOf 问题”还是误用......文档对我来说不清楚
标签: java java-8 completable-future