我把底层源码原理和设计模式完全打通,一一对应、逻辑闭环,让你彻底理解:
它是什么结构?怎么运行?用了哪些设计模式?为什么这么设计?
全程无废话,纯干货、可直接背、可直接面试。
一、CompletableFuture 本质(一句话)
CompletableFuture = 状态机(状态模式)+ 无锁并发回调栈(观察者模式)+ 流水线链式调度(责任链模式)+ 命令封装(命令模式)
它是一个异步任务容器:
任务没完成时:存储回调
任务完成时:自动触发回调
全程非阻塞、高性能、基于 CAS 无锁实现
二、核心源码结构(最关键 3 个字段)
public class CompletableFuture<T> {// 1. 任务结果 / 异常(状态机数据)volatile Object result;// 2. 回调链表(所有 thenApply/thenRun 都存在这里)volatile Completion stack;// 3. 任务状态:未完成 / 正常 / 异常 / 取消static final int NORMAL, EXCEPTIONAL, CANCELLED;}
三、完整运行流程 + 对应设计模式

流程 1:创建异步任务
CompletableFuture.supplyAsync(() -> {return queryDB(); // 耗时任务});
底层动作
创建空 CF,result = null → 未完成状态
任务封装成命令对象丢给线程池
立刻返回 CF,主线程不阻塞
对应设计模式
工厂模式:supplyAsync 负责创建实例
命令模式:任务被封装成可执行对象
策略模式:可指定线程池(执行策略)
流程 2:添加回调(thenApply /thenRun)
cf.thenApply(result -> {return result.getName();});
底层动作
判断 CF 是否完成
已完成 → 立即执行回调
未完成 → 包装成 Completion 压入 stack 回调栈
对应设计模式
观察者模式:注册 “监听器”,等完成后通知
责任链模式:回调形成链式结构
命令模式:回调被封装成命令
流程 3:任务完成(setResult /complete)
complete(value); // 赋值结果postComplete(); // 触发所有回调
底层动作
CAS 原子更新 result
状态从 未完成 → 已完成
遍历 stack,逐个弹出回调执行
对应设计模式
状态模式:状态切换,行为随之改变
观察者模式:任务完成 → 通知所有观察者(回调)
迭代器模式:遍历回调栈
责任链模式:依次执行流水线
流程 4:触发回调的灵魂方法:postComplete ()
final void postComplete() {Completion h;while ((h = stack) != null) {// CAS 无锁弹出栈顶if (casStack(h, h.next)) {h.fire(); // 执行回调}}}
对应设计模式
观察者模式:发布通知
命令模式:执行命令(fire)
迭代器模式:遍历链表
无锁设计(CAS):高并发基石
四、设计模式 + 源码位置 + 作用 完整对照表
五、最核心 4 大模式(必须掌握)
1. 观察者模式(灵魂)
任务 = 被观察者
回调 = 观察者
完成 = 发布事件
postComplete () = 事件派发
你不用轮询,完成自动通知你。
2. 状态模式(基础)
CompletableFuture 是状态机:
未完成、正常完成、异常完成、取消
状态不同,行为完全不同。
3. 责任链模式(链式调用)
supplyAsync → thenApply → thenAccept → thenRun
像工厂流水线,一步处理完交给下一步。
4. 命令模式(封装任务)
所有回调都被包装成 Completion
统一调用 fire() 执行
解耦任务定义与执行
六、底层高性能原理(面试必问)
无锁设计:全程 CAS,不使用 synchronized
回调栈(Treiber Stack):高并发下安全高效
任务共享:不阻塞线程,只注册回调
线程复用:基于线程池,不盲目创建线程
七、终极总结(可直接背诵)
CompletableFuture 源码原理
用 result 存储结果与状态(状态机)
用 stack 存储所有回调
未完成时注册回调
完成时CAS 更新状态 + 派发所有回调
全程非阻塞、事件驱动、无锁高性能
涉及设计模式(8 种)
观察者模式 + 责任链模式 + 状态模式 + 命令模式 + 策略模式 + 装饰器模式 + 工厂模式 + 迭代器模式
最核心 3 个
观察者(回调)+ 责任链(流水线)+ 状态(状态机)
最终一句话
CompletableFuture 就是一个基于状态机的、无锁的、事件驱动的、支持流水线链式回调的异步任务框架。
夜雨聆风