Completablefuture的底层原理是什么

参考面试回答:

个人理解

CompletableFuture 是 Java 8 引入的一个类、它可以让我们在多线程环境中更加容易地处理异步任务。CompletableFuture 的底层原理是基于一个名为 FutureTask 的机制、结合了 监听器 模式 和 等待-通知机制 来处理异步计算。

1.首先就是CompletableFuture 实现了 Future 接口:

这意味着 可以像 Future 一样、用于获取异步计算的结果、检查计算状态等。以及内部使用了 FutureTask FutureTaskFuture 接口的一个实现类、它可以包装一个 Callable 对象、并在后台线程中执行 Callablecall() 方法。 FutureTask 负责管理任务的状态、存储计算结果或异常,并提供同步等待的机制。

2.然后核心的两个字段:

result字段:

  • 它有多个状态、通常是 未完成已完成正常已完成异常已取消 等。它通过一个 volatile 变量来保持任务的执行状态。用于存储异步计算的结果。如果计算过程中发生异常result 会存储异常对象。

  • 任务完成后、通过调用 complete() 方法来更新状态、并通知等待的线程。

然后就是

stack 字段:

  • 这是一个 Completion 类型的链表、也称为依赖链。 每个 Completion 对象代表一个待触发的依赖任务、例如 thenApplythenAccept 等方法创建的任务。 stack 链表将这些任务串联起来,形成任务编排的流水线。

3.然后介绍一下监听器模式:

  • CompletableFuture 支持链式调用(例如:thenApplythenAccept 等)、这些方法为某个任务注册了回调函数(监听器)。回调函数会在任务完成后执行。内部通过 Listener 机制实现、使用 synchronizedCAS来保证线程安全。

  • 以及这些回调通常会通过 Executor 执行。CompletableFuture 支持使用默认的线程池(ForkJoinPool)来执行这些任务、也可以自定义线程池。

4.与 Future 的区别:

CompletableFuture 相比于传统的 Future,提供了更强大的功能,例如链式调用、异常处理、组合操作等,使得异步编程更加灵活和方便。

我个人觉得这个的内容太多 我先放一个面试回答 后续补充内容

相关推荐
饼干哥哥12 小时前
聊了50个AI出海的市场团队,我总结了达人营销的7宗罪
前端
词元Max12 小时前
2.5 Python 类型注解与运行时类型检查
开发语言·python
qq_4275060812 小时前
vscode使用kimi code的简单经验分享
前端·vscode·ai编程
恋猫de小郭12 小时前
Claude Code 源码里有意思设定:伪造、投毒、卧底、封号
前端·人工智能·ai编程
wangchunting13 小时前
数据结构-树
java·数据结构
无籽西瓜a13 小时前
【西瓜带你学设计模式 | 第五期 - 建造者模式】建造者模式 —— 产品构建实现、优缺点与适用场景及模式区别
java·后端·设计模式·软件工程·建造者模式
wzl2026121313 小时前
《基于企微会话存档的精准发送策略:从互动数据分析到防折叠群发》
java·数据分析·企业微信
福楠13 小时前
现代C++ | C++14甜点特性
linux·c语言·开发语言·c++
Blurpath住宅代理13 小时前
网页抓取(Web Scraping)完整技术指南:从原理到实战
前端
charlie11451419113 小时前
嵌入式C++教程实战之Linux下的单片机编程:从零搭建 STM32 开发工具链(4)从零构建 STM32 构建系统
linux·开发语言·c++·stm32·单片机·学习·嵌入式