completablefuture 是 java 异步编排核心工具,通过 supplyasync/runasync 创建任务,thenapply/thenaccept/thencompose 实现链式处理,allof/anyof 协同多任务,exceptionally/handle 处理异常,ortimeout 控制超时。

CompletableFuture 是 Java 并发中实现异步编排的核心工具,它把“等结果”变成“声明依赖关系”,让多个异步任务按需串联、并行或组合,而不是靠轮询或嵌套回调硬扛。
创建任务:选对方法,明确有无返回值
根据业务逻辑是否需要返回值,选择对应工厂方法:
-
supplyAsync:执行有返回值的任务(如查数据库、调接口),返回
CompletableFuture<t></t> -
runAsync:执行无返回值的任务(如发消息、写日志),返回
CompletableFuture<void></void> - 两个方法都支持传入自定义线程池,生产环境必须显式指定,避免挤占
ForkJoinPool.commonPool()
链式编排:用 then 开头的方法串起处理流程
每个 thenXXX 方法都会生成新的 CompletableFuture,构成可读的流水线:
- thenApply:转换结果(如 String → Integer),返回新 CompletableFuture
- thenAccept:消费结果(如打印、入库),不产生新结果
-
thenCompose:用于下一个异步操作依赖前序结果(如“查用户”后“查该用户的订单”),避免嵌套
thenApply().thenApply().get()
多任务协同:并行、等待与汇总
当多个独立任务需要一起发起、统一收口时:
-
allOf:等待所有任务完成(适合 void 类型任务),返回
CompletableFuture<void></void> - anyOf:任一任务完成即触发(适合降级或兜底场景)
- 若需合并多个有返回值的任务结果,先用
allOf等待,再用join()分别取值,或配合thenCombine/thenCompose实现更自然的结果聚合
异常与超时:让异步更健壮
异步不能只管成功,失败和超时同样关键:
- exceptionally:捕获上游任意阶段抛出的异常,返回默认值或降级结果
- handle:统一处理成功与异常两种情况,适合做日志记录或状态归一
- orTimeout:设置单个任务超时(Java 9+),超时后自动 completeExceptionally
- 慎用
get();推荐用join()(不抛受检异常)或搭配completeOnTimeout做兜底
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











