CompletableFuture 是 Java 8 中新增的一个异步编程工具类,它是基于 Future 和 CompletionStage 接口构建的,可以与 Java 8 中的 Stream API 配合使用,也能够与 Java 9 中的 Reactive Stream API 进行交互。
主要用于异步执行任务并返回结果,实现异步计算和操作组合。它提供了一种灵活、可组合的方式来实现异步计算,同时也提供了异常处理、取消、超时等特性。在CompletableFuture中,我们可以通过回调函数来处理任务的结果,也可以使用其它方法来组合多个CompletableFuture对象,以构建更复杂的异步操作流水线。
案例:在实际的开发中为了实现一个业务功能,往往需要调用很多的功能,而每一个功能的执行都需要消耗时间,需要等所有的功能执行完毕该业务才能响应(以上也就是我们说的同步串行化执行),这样会导致我们业务功能的效率地。CompletableFuture就是实现一个业务里面的多个功能同时执行(并发执行),同时也能实现一个功能需要依赖另外一个功能的结果。
常用api:
1. 获取一个异步任务:
注意:runXxx都是没有返回值的,supplyXss可以获取返回值的结果通过get
()获取返回结果值,可以使用自定义线程池,否则就使用默认的线程池
2.计算完成是回调:
注意:方法不以Async 结尾,意味着 Action 使用相同的线程执行,而Async 可能会使用其他线程执行《如果是使用相同的线程池,也可能会被同一个线程选中执行)
3.handle方法:
注意:和 complete 一样,可对结果做最后的处理(可处理异常),可改变返回值。
4.线程串行化方法(典型场景A任务需要B任务的结果值):
5.两任务组合都要完成(两个任务同时完成才能执行后续任务):
6.两任务组合一个完成(两个任务只要完成一个就能后续任务):
7. 多任务组合:
allof:等待所有任务完成
anyof:只要一个任务完成