java - 我可以在 CompletableFuture 上多次使用 thenCombine/thenCompose 吗?

标签 java multithreading thread-safety completable-future

假设我有 CompletableFutures A、B 和 C 是可运行的。 B 依赖于 A,C 依赖于 A 和 B,我可以先做 A,然后组合 B 和 B,然后组合 A,这样 C 就可以从 A 和 B 获取值,即使 B 也依赖于 A 的值?

基本上我要问的是 - 有没有办法获得像这样的 CompletableFuture 管道:

A -- B -- C
  -------^

CompletableFuture<String> A = CompletableFuture.supplyAsync(() -> return "Hello");
CompletableFuture<String> B = A.thenApplyAsync(stringA -> return stringA + "World");
B.thenCombine(A, (stringA, StringB) -> doStuffWithAAndB(stringA, stringB));

希望这是有道理的。

最佳答案

这样做完全没问题。对于如何将 CompletableFuture 组合在一起没有任何限制。

您有责任确保它们最终完成,但这不是这里的问题。

或者,您可以直接从回调访问 A,如下所示:

CompletableFuture<String> a = CompletableFuture.supplyAsync(() -> return "Hello");
CompletableFuture<String> b = a.thenApplyAsync(stringA -> return stringA + "World");
b.thenApply(stringB -> doStuffWithAAndB(a.join(), stringB));

但这确实是一个偏好问题。

关于java - 我可以在 CompletableFuture 上多次使用 thenCombine/thenCompose 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48724206/

相关文章:

java - 这是 Java 中 AtomicReference 的正确用例吗?

java - 使用执行器处理 Java 中流的子流

Java:何时同步方法和 block

c++ - 在写入或读取 CFile 对象的过程中文件指针可以更改吗

java - 如何忽略 GET 请求的 @OneToMany 关系?

java - 模拟 RabbitMQ 进行测试

java - 反转除法的颜色结果 int

java - 从不同 Elasticsearch 主机中的索引查询

java - java.util.Observable 是线程安全的吗?

java - 如何在Java中在服务器端执行线程安全方法?