CompletableFuture

一、

提交任务

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结尾的方法,必须所有都完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值