- 解决
Future
无法描述多个Future
结果间的依赖性
的问题- 一个大任务中,多个小任务是相互依赖的,没有组合各个小任务的结果,没法得到大任务。
- 两个任务之间存在
顺序
,产生依赖
- 功能
-
流式处理 - CompletionStage 中提供大量接口供流式调用
-
提供解决
异步执行任务的静态方法
(4个)- 无返回值静态方法(2个),有返回值静态方法(2个),在方法中可设置
线程池
- 异步执行线程,默认线程在
ForkJoinPool.commonPool()
系统级公共线程池中,可设置。
- 异步执行线程,默认线程在
- 调用
CompletableFuture.get()方法
,获取异步任务的结果。(运行速度快可以获得,否则阻塞) - 出现
异常
怎么处理?
- 无返回值静态方法(2个),有返回值静态方法(2个),在方法中可设置
-
提供
异常处理
- 利用函数式风格,提供
exceptionally()
处理异常
- 利用函数式风格,提供
-
组合任务
- 一个 CompletableFuture 可以在执行完成后,将执行结果通过 Function 传递给下一个 CompletionStage 进行处理。
- 方法 thenCombime() 首先完成当前 CompletableFuture 和 other 的执行。接着,将这两者的执行结果传递给 BiFunction(该接口接收两个参数,并有一个返回值),并返回代表 BiFunction 实例的 CompletableFuture 对象:
// 依赖前一组任务的结果 public <U> CompletableFuture<U> thenCompose(Function<? super T, ? extends CompletionStage<U>> fn) // 组合结果 public <U,V> CompletableFuture<U> thenCombime ( CompletionStage<? extends U> other, BiFunction<? super T, ? super U,? extends V> fn)
-
end
-
- end
参考来源 : Java8 CompletableFuture