CompletableFuture是什么?以及CompletableFuture的作用

文章目录

今天我们来聊聊 CompletableFuture

CompletableFuture

CompletableFuture 是 JDK1.8 里面引入的一个基于事件驱动的异步回调类。

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

而 CompletableFuture 就可以实现这个功能。

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

这三个逻辑是按照顺序同步去实现的,也就是先查询到订单以后,再针对这个订单发起支付,支付成功以后再发送邮件通知。

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

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

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

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

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

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

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

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

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

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

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

相关推荐
人道领域几秒前
【黑马点评日记】:用户签到功能详解——从Bitmap入门到避坑指南
java·数据库·redis·后端
梦梦代码精4 分钟前
《企业开源商城选型:商业闭环、二次开发与成本平衡》
java·开发语言·低代码·开源·github
狼与自由11 分钟前
灰度发布的策略
java
神仙别闹22 分钟前
基于QT(C++)实现线性表的建立、插入、删除、查找等基本操作
java·c++·qt
Kiyra35 分钟前
从上传到可问答:Interview Agent 的知识库 RAG 链路
java·人工智能·后端·spring·职场和发展
拙野39 分钟前
工作中Mybatis动态SQL的使用
java·sql·mybatis
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题】【Java基础篇】第39题:说说反射的用途及实现原理,Java获取反射(Class)的三种方法
java·开发语言·后端·python·面试
PeterLi1 小时前
踩坑实录:JRebel 启动报 Mapper 重复 ID 异常,IDEA 普通启动却正常?
java·后端
小碗羊肉1 小时前
【JavaWeb | 第五篇】JDBC
java·开发语言·数据库
江南十四行1 小时前
Python上下文管理器与with语句——资源管理的艺术
java·jvm·数据库