Java异步编程:CompletionStage接口详解
CompletionStage 接口分析
接口能力概述
CompletionStage 是 Java 8 引入的接口,用于表示异步计算的一个阶段,它提供了强大的异步编程能力:
- 链式异步操作:允许将一个异步操作的结果传递给下一个操作
- 组合操作:可以组合多个 CompletionStage
- 异常处理:提供对异步计算中异常的处理机制
- 多种执行方式:支持同步、默认异步和自定义执行器的异步执行
主要功能分类
1. 单阶段依赖操作
thenApply()
- 转换结果thenAccept()
- 消费结果thenRun()
- 执行无结果操作
2. 双阶段组合操作
thenCombine()
- 两个阶段都完成后合并结果thenAcceptBoth()
- 两个阶段都完成后消费结果runAfterBoth()
- 两个阶段都完成后执行操作
3. 任一阶段完成操作
applyToEither()
- 任一阶段完成后转换结果acceptEither()
- 任一阶段完成后消费结果runAfterEither()
- 任一阶段完成后执行操作
4. 异常处理
exceptionally()
- 异常时提供替代值handle()
- 无论成功或异常都处理whenComplete()
- 无论成功或异常都执行操作
5. 组合其他 CompletionStage
thenCompose()
- 扁平化嵌套的 CompletionStage
默认方法
从 Java 12 开始,CompletionStage 接口新增了一些默认方法,主要用于更灵活的异常处理:
-
exceptionallyAsync(Function<Throwable, ? extends T> fn)
- 异步处理异常的默认方法
-
exceptionallyAsync(Function<Throwable, ? extends T> fn, Executor executor)
- 使用指定执行器异步处理异常的默认方法
-
exceptionallyCompose(Function<Throwable, ? extends CompletionStage<T>> fn)
- 异常时返回新的 CompletionStage 的默认方法
-
exceptionallyComposeAsync(Function<Throwable, ? extends CompletionStage<T>> fn)
- 异步方式异常时返回新的 CompletionStage 的默认方法
-
exceptionallyComposeAsync(Function<Throwable, ? extends CompletionStage<T>> fn, Executor executor)
- 使用指定执行器异步方式异常时返回新的 CompletionStage 的默认方法
执行模式
大多数方法都有三种变体:
- 同步:基本方