一次性搞懂CompletableFuture

一次性搞懂CompletableFuture

作为异步编程的工具类,相较于Future来说CompletableFuture支持更多的操作。由于这个类提供的方法太多,这里介绍一些常用的方法及其底层原理。

CompletableFuture基本结构介绍:

成员属性:
volatile Object result:执行结果,异步任务执行的结果就保存在这里
volatile Completion stack: 存放后置任务的栈
类方法:
CompletableFuture.supplyAsync(Supplier supplier):提交任务并返回CompletableFuture对象
CompletableFuture.supplyAsync(Supplier supplier,Executor executor):提交任务并返回CompletableFuture对象,区别是可以传入自定义线程池(推荐使用),否则将会使用默认的线程池。
CompletableFuture.runAsync(Runnable runnable):提交任务不返回结果
CompletableFuture.runAsync(Runnable runnable,Executor executor):提交任务不返回结果,区别同supplyAsync。

对象方法:

isDone():Future 任务是否完成。
public T get():获取结果,没有执行完之前会阻塞。
private Object timedGet(long nanos):获取结果,超时没有结果自动返回。
public T join():(待确认)也是获取结果。
public T getNow(T valueIfAbsent):获取结果,没有结果则立刻返回传入的值。

任务编排类型(属于后置任务处理,可以一直叠加,属于CompletableFuture的链式调用):

public CompletableFuture thenApply( Function<? super T,? extends U> fn):有入参有返回值,接收前任务的结果,进行后置处理,并返回结果。

public CompletableFuture thenAccept(Consumer<? super T> action):有入参,无返回值,接收前任务的结果,进行后置处理,不返回结果,
public CompletableFuture thenRun(Runnable action):无入参,无返回值,不接收前任务的结果,也不返回结果。

public <U,V> CompletableFuture thenCombine( CompletionStage<? extends U> other,BiFunction<? super T,? super U,? extends V> fn) :实现A+B->C效果,先执行AB任务,都完成后,再执行C任务。
一个入参为新的任务,第二个入参为前一个任务和新任务的结果,用于同时处理两个任务的结果。

public CompletableFuture acceptEither(CompletionStage<? extends T> other, Consumer<? super T> action)
??? 前两个任务,

public CompletableFuture exceptionally(Function<Throwable, ? extends T> fn):
接收异常信息,并加以处理
public static CompletableFuture allOf(CompletableFuture<?>… cfs):
接收多个任务,聚合起来,保证同时完成,并返回一个CompletableFuture。类似于CountDownLatch的作用。

public static CompletableFuture anyOf(CompletableFuture<?>… cfs):
接收多个任务,只要有一个任务返回结果,就返回结果。

常用的allOf,配合get或join一起使用

get 方法为阻塞当前线程的操作,只有和Thread.join有点类似,只有当前一个线程执行结束后才会被唤醒。

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值