一、
提交任务
runAsync
supplyAsync
中间操作
回调
thenApply thenApplyAsync:某个任务执行完成后执行的动作,Function<?super T,?extendsU>
thenCompose thenComposeAsync:某个任务执行完成后执行的动作,Function<?super T,? extends CompletionStage<U>> 与thenApply不同的是CompletionStage
thenAccept thenAcceptAsync:某个任务执行完成后执行的动作,Consumer
thenRun thenRunAsync:某个任务执行完成后执行的动作,Runnable
whenComplete whenCompleteAsync:某个任务执行完成后执行的动作,BiConsumer<? super T, ? super Throwable>
handle handleAsync:某个任务执行完成后执行的动作,BiFunction<? super T, Throwable, ? extends U> 与whenComplete区别是有返回值
exceptionally:发生异常时执行的动作
and聚合
thenCombine thenCombineAsync:将两个任务的执行结果作为所提供函数的参数,且该方法有返回值
thenAcceptBoth thenAcceptBothAsync:将两个任务的执行结果作为方法入参,但是无返回值
runAfterBoth runAfterBothAsync:两个任务都执行完成后,执行下一步操作,没有入参,也没有返回值
or聚合
applyToEither applyToEitherAsync:两个任务哪个执行的快,就使用哪一个结果,有返回值
acceptEither acceptEitherAsync:两个任务哪个执行的快,就消费哪一个结果,无返回值
runAfterEither runAfterEitherAsync:任意一个任务执行完成,进行下一步操作(Runnable类型任务)
并行执行
allOf:当所有给定的 CompletableFuture 完成时,返回一个新的 CompletableFuture
anyOf:当任何一个给定的CompletablFuture完成时,返回一个新的CompletableFuture
获取结果
join 阻塞等待,不会抛异常
get 阻塞等待,会抛异常
getNow方法则是立即返回结果,如果还没有结果,则返回默认值,也就是该方法的入参
二、常用方法
创建类
- completeFuture 可以用于创建默认返回值
- runAsync 异步执行,无返回值
- supplyAsync 异步执行,有返回值
- anyOf 任意一个执行完成,就可以进行下一步动作
- allOf 全部完成所有任务,才可以进行下一步任务
状态取值类
- join 合并结果,等待
- get 合并等待结果,可以增加超时时间。get和join区别,join只会抛出unchecked异常,get会返回具体的异常
- getNow 如果结果计算完成或者异常了,则返回结果或异常;否则,返回valueIfAbsent的值
- isCancelled 判断是否已取消
- isCompletedExceptionally 判断是否未完成get会抛异常
- isDone 判断是否已经完成
控制类
用于主动控制CompletableFuture的完成行为
- complete 在get的时候如果未完成给一个默认值
- completeExceptionally 设置成功时,未完成状态下返回自定义异常
- cancel 设置后get的时候抛java.util.concurrent.CancellationException,入参无意义
- orTimeout 超时时间
- completeOnTimeout 超时并默认值
规则总结:
带run的方法,无入参,无返回值。
带accept的方法,有入参,无返回值。
带supply的方法,无入参,有返回值。
带apply的方法,有入参,有返回值。
带handle的方法,有入参,有返回值,并且带异常处理。
以Async结尾的方法,都是异步的,否则是同步的。
以Either结尾的方法,只需完成任意一个。
以Both/Combine结尾的方法,必须所有都完成。