CompletableFuture
- 在Java8中,CompletableFuture提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组合 CompletableFuture 的方法。
- 它可能代表一个明确完成的Future,也有可能代表一个完成阶段( CompletionStage ),它支持在计算完成以后触发一些函数或执行某些动作。
- 它实现了Future和CompletionStage接口
创建CompletableFuture
- supplyAsync 有
- runAsync 无
两者的区别在于是否返回result
执行
- CompletableFuture.allOf()
- CompletableFuture.anyOf()
两者的区别在于是否需要全部任务执行完在继续
allOf是阻塞式的,需要全部future执行完才会继续
anyOf则是有个执行完就ok
调用get方法,得到结果值
回调函数
thenApply回调函数(callback)

当前阶段正常完成以后执行,而且当前阶段的执行的结果会作为下一阶段的输入参数。thenApplyAsync默认是异步执行的。这里所谓的异步指的是不在当前线程内执行。
thenAccept与thenRun

thenAccept和thenRun都是无返回值的。如果说thenApply是不停的输入输出的进行生产,那么thenAccept和thenRun就是在进行消耗。它们是整个计算的最后两个阶段。
同样是执行指定的动作,同样是消耗,二者也有区别:- thenAccept接收上一阶段的输出作为本阶段的输入
- thenRun根本不关心前一阶段的输出,根本不不关心前一阶段的计算结果,因为它不需要输入参数
thenCombine整合两个计算结果

此阶段与其它阶段一起完成,进而触发下一阶段:

whenComplete

样例:

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小五的个人杂货铺!