thenCombine用于合并两个并行完成的CompletableFuture结果,通过BiFunction生成新结果并返回CompletableFuture;要求两者均完成,异常会传递,语义上侧重“计算组合”。

thenCombine 用于把两个独立完成的 CompletableFuture 的结果,按指定函数合并成一个新的结果,返回一个新的 CompletableFuture。
基本用法:合并两个异步任务的结果
它要求两个 future 都已完成(不阻塞),然后用一个 BiFunction 合并它们的结果。语法是:
future1.thenCombine(future2, (r1, r2) -> { /* 合并逻辑 */ })注意:
- future1 和 future2 是并行执行、互不依赖的;
- thenCombine 本身不会触发执行,只定义“当两者都完成时做什么”;
- 返回的新 future 的类型由合并函数的返回值决定。
常见写法示例
比如同时查用户信息和订单数,再拼成摘要:
CompletableFutureCompletableFuture
CompletableFuture
(user, count) -> String.format("用户 %s,共 %d 笔订单", user.getName(), count));
这个 summaryFut 会在 user 和 orderCount 都拿到后自动完成,结果是字符串。
处理异常与默认值
如果任一 future 异常完成,thenCombine 返回的 future 也会以相同异常完成。如需容错,可提前用 exceptionally 或 handle 处理:
- 对单个 future 做兜底:
userFut.exceptionally(e -> new User("未知")) - 在合并函数里判空或捕获异常(不推荐,因异常不会进这里)
- 更稳妥方式:先用
handle统一转为 Optional 或 Result 包装类,再 combine
和 thenAcceptBoth / runAfterBoth 的区别
三者都等待两个 future 完成,但语义不同:
-
thenCombine:需要返回新结果 → 适合“计算+组合”场景 -
thenAcceptBoth:只消费两个结果,不返回值 → 适合“记录日志、发通知” -
runAfterBoth:不关心结果,只执行动作 → 适合“清理资源、发信号”
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











