CompletableFuture是什么?以及CompletableFuture的作用

文章目录

今天我们来聊聊 CompletableFuture

CompletableFuture

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相关推荐
晨曦中的暮雨8 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
文丑颜不良啊10 小时前
LeetCode876~900题目解析
java·leetcode
aloha_78910 小时前
Java 基础、集合、异常与 JUnit 5 速查
java·junit·sqlserver
知守观11 小时前
设计模式实战:从真实老项目中看标准模板方法与工厂的落地
java·spring·设计模式
独隅11 小时前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
Wang's Blog11 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
SL_staff12 小时前
JVS私有化文档系统上线避坑指南:5大运维与业务协同断点及检测加固实践
java·开源·全栈
FinelyYang13 小时前
考试系统简答题 AI 阅卷:覆盖度驱动、异步评分与人机协同落地实践
java·大数据·人工智能
hhhjhl13 小时前
Yup 跨端三方库仓颉适配全流程
java·开发语言
用户31268748772013 小时前
Java 对象内存布局:压缩指针、对齐填充与 JOL 实测
java