请解释 Java 的 CompletableFuture 是什么,并说明其核心特性与典型使用场景。
考察说明
考查对 CompletableFuture 异步编程模型的理解,包括任务编排、回调机制与异常处理。
回答思路
- 【回答框架 1】CompletableFuture 是 Java 8 引入的异步编程工具,实现 Future 与 CompletionStage 接口,支持链式回调、组合与编排,解决 Future 无法手动完成和难以组合的问题。
- 【回答框架 2】核心机制基于回调驱动,通过 thenApply、thenAccept 等依赖方法注册回调,任务完成后自动触发,避免阻塞等待。支持 thenCompose 进行扁平化组合,thenCombine 处理并行依赖。
- 【回答框架 3】相比 Future,CompletableFuture 可手动完成,支持回调式而非轮询式异步,且提供大量组合方法。注意其默认使用 ForkJoinPool.commonPool,但可以自定义执行器。
- 【回答框架 4】典型使用场景包括异步调用外部服务、并行执行独立任务后汇总结果、超时控制与异常恢复。例如,先查询用户信息,再异步获取其订单,最后合并返回。
- 【关键点 1】实现了 CompletionStage 接口,支持几十个方法进行任务编排。
- 【关键点 2】与 Future 相比,核心优势在于回调式、可组合、可手动完成。
- 【关键点 3】异常处理通过 exceptionally 或 handle,可恢复或传播。
- 【关键点 4】默认使用公共 ForkJoinPool,性能受限于并行度,可传入自定义 Executor。
- 【关键点 5】供应链场景:异步编排 + 超时 + 异常处理是常见组合。
- 【易错点 1】若在异步任务中直接使用阻塞操作,会浪费线程且影响整体吞吐。
- 【易错点 2】异常必须显式处理,否则可能被静默吞掉,导致结果不正确。
- 【易错点 3】默认线程池并行度有限,高并发下可能成为瓶颈,需评估自定义线程池。