CompletableFuture基本概念及用法

CompletableFuture继承于java.util.concurrent.Future,它本身具备Future的所有特性,并且基于JDK1.8的流式编程以及Lambda表达式等实现一元操作符、异步回调以及事件驱动编程的异步类,可以用来实现多线程的串行关系,并行关系,聚合关系。它的灵活性和更强大的功能是Future无法比拟的。

简单来说,就是当使用异步线程去执行一个任务的时候,我们希望在任务结束以后触发

一个后续的动作。而CompletableFuture就可以实现这个功能。

举个简单的例子如下图,比如在一个批量支付的业务逻辑里面,涉及到查询订单、支付、发送邮件通知这三个逻辑。

这三个逻辑是按照顺序同步去实现的,也就是先查询到订单以后,再针对这个订单发起

支付,支付成功以后再发送邮件通知。

而这种设计方式导致这个方法的执行性能比较慢。

 

所以,这里可以直接使用CompletableFuture,如下图所示,也就是说把查询订单的逻辑放在一个异步线程池里面去处理。

然后基于CompletableFuture的事件回调机制的特性,可以配置查询订单结束后自动触发支付,支付结束后自动触发邮件通知。

从而极大的提升这个这个业务场景的处理性能!

 

CompletableFuture提供了5种不同的方式,把多个异步任务组成一个具有先后关系的处理链,然后基于事件驱动任务链的执行。

第一种,thenCombine (如图),把两个任务组合在一起,当两个任务都执行结束以后触发事件回调。

 

第二种,thenCompose (如图),把两个任务组合在一起,这两个任务串行执行,也就是第一个任务执行完以后自动触发执行第二个任务。

第三种,thenAccept(如图),第一个任务执行结束后触发第二个任务,并且第一个任务的执行结果作为第二个任务的参数,这个方法是纯粹接受上一个任务的结果,不返回新的计算值。

第四种,thenApply (如图),和thenAccept一样,但是它有返回值。

第五种,thenRun (如图),就是第一个任务执行完成后触发执行一个实现了Runnable接口的任务。

 

最后,我认为, CompletableFuture 弥补了原本Future的不足,使得程序可以在非阻塞的状态下完成异步的回调机制。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值