跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

在Java中CompletableFuture怎么用_Java异步编程模型解析

CompletableFuture 是 Java 8 引入的异步编程核心类,支持主动回调、链式编排与异常可控;需通过 supplyAsync、runAsync 等静态方法创建,禁用直接 new;提供 thenApply/Async、thenCompose、thenCombine 等组合操作;异常处理含 exceptionally、handle、whenComplete;协同控制支持 allOf/anyOf;慎用 get(),推荐非阻塞组合。 CompletableFuture 是 Java 8 引入的核心异步编程工具,它把 Future 的被动轮询升级为主动回调 + 组合编排能力,真正让异步代码可读、可链、可错控。 CompletableFuture 的创建方式 不能直接 new,必须通过静态工厂方法启动: supplyAsync(Supplier) :有返回值的 异步任务 (推荐),例如
CompletableFuture.supplyAsync(() -> doHeavyWork())
runAsync(Runnable) :无返回值的异步任务,适合发通知、写日志等 completedFuture(T) :立即完成的 CompletableFuture,常用于测试或兜底返回 也可用
new CompletableFuture()
手动触发(慎用),配合
complete()
或
completeExceptionally()
控制状态 异步任务的串行与并行组合 CompletableFuture 支持函数式链式调用,关键在于区分“是否切换线程”和“是否等待结果”: thenApply / thenAccept / thenRun :上一阶段完成后,在**同一个线程池**(默认 ForkJoinPool)中执行后续逻辑;适用于轻量处理 thenApplyAsync / thenAcceptAsync :显式开启新异步阶段,可传自定义 Executor,适合耗时操作避免阻塞前序线程 thenCompose :用于“返回另一个 CompletableFuture”的场景,实现扁平化嵌套(类似 Mono.flatMap),避免 CompletableFuture> thenCombine / thenAcceptBoth :合并两个独立异步任务的结果,例如查用户 + 查订单,再一起组装响应 异常处理与 fallback 机制 CompletableFuture 把异常当作一等公民来处理,不抛出就无法中断链路: Eclipse导入Android或其他的JAVA项目的正确方法 WORD版 本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看 下载 立即学习 “ Java免费学习笔记(深入) ”; exceptionally(Function) :仅当发生异常时触发,接收 Throwable,返回默认值(类型需匹配) handle(BiFunction) :无论成功或失败都执行,参数为 (result, throwable),更灵活地统一收口 whenComplete(BiConsumer) :只做副作用(如清理资源、打日志),不改变结果或异常状态 注意:
get()
会阻塞并包装异常为 ExecutionException;生产环境应尽量避免调用,改用非阻塞组合方式 多个任务的协同控制 实际业务常需协调多个异步操作: CompletableFuture.allOf(...) :等待所有任务完成(返回 void CompletableFuture),适合“全成功才继续”,但不聚合结果——需手动 get 每个原始 future CompletableFuture.anyOf(...) :任一完成即结束,返回第一个完成的 CompletableFuture(类型为 Object,需强转,慎用) 更实用的是 allOf +stream+ join 模式:先 collect 成数组,allOf 后用 stream.map(f -> f.join()) 提取结果列表 超时控制可用
orTimeout(long, TimeUnit)
(Java 9+)或封装带 scheduled future 的逻辑 CompletableFuture 不是万能胶,过度链式嵌套仍会导致可读性下降;合理划分任务边界、搭配虚拟线程(Java 21+)或反应式框架(如 Project Reactor),才能在高并发场景下稳住异步这艘船。

相关文章