原文: https://blog.csdn.net/zsx_xiaoxin/article/details/123898171
CompletableFuture是jdk8的新特性。CompletableFuture实现了CompletionStage接口和Future接口,前者是对后者的一个扩展,增加了异步会点、流式处理、多个Future组合处理的能力,使Java在处理多任务的协同工作时更加顺畅便利。
一. 创建异步任务
- supplyAsync 有返回值
- runAsync 无返回值
- 获取执行结果
// 如果完成则返回结果,否则就抛出具体的异常
public T get() throws InterruptedException, ExecutionException
// 最大时间等待返回结果,否则就抛出具体异常
public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
// 完成时返回结果值,否则抛出unchecked异常。为了更好地符合通用函数形式的使用,
// 如果完成此 CompletableFuture所涉及的计算引发异常,则此方法将引发unchecked异常并将底层异常作为其原因
public T join()
// 如果完成则返回结果值(或抛出任何遇到的异常),否则返回给定的 valueIfAbsent。
public T getNow(T valueIfAbsent)
// 如果任务没有完成,返回的值设置为给定值
public boolean complete(T value)
// 如果任务没有完成,就抛出给定异常
public boolean completeExceptionally(Throwable ex)
二.异步回调处理
用来处理顺序的任务,前一个执行完后,在执行后一个,可获取前面的返回值,并返回数据
前一个执行完,再执行当前,将前面返回值作为参数
- thenApply和thenApplyAsync: 有参数,有返回值
- thenAccept和thenAcceptAsync: 有参数,无返回值
- thenRun和thenRunAsync: 无参,无返回值
- whenComplete和whenCompleteAsync: 有参(参数中包含异常),无返回值
- handle和handleAsync: 有参(参数中包含异常),有返回值
三.多任务组合处理
- thenCombine、thenAcceptBoth 和runAfterBoth: 两个任务,都成功再执行下一个; 分别:有参有返回,有参无返回,无参无返回
- applyToEither、acceptEither和runAfterEither: 两个任务,一个成功,就执行下一个, 分别:有参有返回,有参无返回,无参无返回
- allOf : 多个任务都成功,就执行主线程
- anyOf : 多个任务有一个成功,就执行主线程
四.总结
- 带apply表示运用,有参,有返回值
- 带accept表示接受,有参,无返回值
- 带Async表示异步,会另起线程,可以自定义线程池,否则用默认线程池ForkJoinPool.commonPool()
- 该类用于对异步方法进行编排,即对多个异步任务 顺序执行、并列执行、条件执行(两者都成功再执行,两者成功一个就执行)
细节,请看原文,此处只记录下主要使用方法和功能