当前位置: 首页 > news >正文

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,提供了更强大的功能,例如链式调用、异常处理、组合操作等,使得异步编程更加灵活和方便。

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

相关文章:

  • 优艾智合人形机器人“巡霄”,开启具身多模态新时代
  • GeoTime:主要用于执法、公共安全和情报分析领域GIS软件
  • AI训练存储架构革命:存储选型白皮书与万卡集群实战解析
  • git `switch` 命令详解与实用示例
  • 图论----拓扑排序
  • MyBatis的第三天笔记
  • VSCode使用Remote-SSH连接服务器时启动失败glibc不符合
  • Java学习——day23(反射的对象创建与方法调用)
  • Text-to-SQL技术深度解析:从理论突破到工程实践
  • Jmeter+Jenkins+Ant自动化持续集成环境搭建
  • [ctfshow web入门] web7
  • PyQt6实例_A股日数据维护工具_完整项目代码_终结章
  • Gis相关记录备忘录
  • 软件工程第五章习题
  • 15-产品经理-维护需求
  • redis 和 MongoDB都可以存储键值对,并且值可以是复杂json,用完整例子分别展示说明两者在存储json键值对上的使用对比
  • 贪心算法(16)(java)俄罗斯套娃信封问题
  • 从零到一:用Java和Spring Security构建OAuth2授权服务器
  • 【Vue-vue基础知识】学习笔记
  • 强化学习Q-Learning:DQN
  • 刘国中出席第78届世界卫生大会并致辞
  • 国创会举办国际茶日活动,十余国驻华大使夫人参加
  • 现代科学中的盲点
  • 31只北交所主题基金齐刷净值纪录,年内最高涨超80%,已有产品打出“限购牌”
  • 上海市政府党组赴全面从严治党警示教育基地参观学习,推进作风建设走深走实
  • 海南征集民生领域涉嫌垄断违法行为线索,包括行业协会等领域