thenCombine用于合并两个已完成或即将完成的CompletableFuture结果,通过BiFunction生成新CompletableFuture;要求两者均完成才执行合并逻辑,全程异步非阻塞,任一异常则新future也异常完成。

thenCombine 用于把两个**已完成或即将完成**的 CompletableFuture 的结果,通过一个二元函数合并成一个新的 CompletableFuture。它不关心两个任务谁先完成,只要都完成了,就触发合并逻辑。
核心用法:传入另一个 CompletableFuture 和 BiFunction
语法是:cf1.thenCombine(cf2, (r1, r2) -> { /* 合并逻辑 */ })
其中:
- cf1 和 cf2 是两个独立的 CompletableFuture(类型可不同)
- (r1, r2) -> ... 是接收两者结果的 lambda,返回新结果(类型由你定义)
- 返回值是 CompletableFuture,R 是 lambda 的返回类型
关键行为:两个都完成才执行,且不阻塞主线程
- 如果
cf1或cf2还没完成,thenCombine会自动等待两者都完成后再调用函数 - 整个过程是异步的,不会调用
join()或get(),不会阻塞当前线程 - 若任一 future 以异常结束,返回的 future 也会以相同异常完成(除非后续用
exceptionally处理)
实际例子:合并用户信息和订单数
假设你有两个异步任务:
// 模拟异步获取用户姓名CompletableFuture
// 模拟异步获取该用户订单数量CompletableFuture
// 合并为一句描述CompletableFutureSystem.out.println(desc.join()); // 输出:Alice 有 5 个订单
注意点:和 thenAcceptBoth / runAfterBoth 的区别
-
thenCombine:需要返回值,生成新的CompletableFuture -
thenAcceptBoth:只消费两个结果(void 操作),不返回新 future -
runAfterBoth:不关心结果,只在两者都完成后执行 Runnable
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











