AQS 完整流程图 核心笔记一、AQS 核心结构AQS state(同步状态) CLH 双向队列 LockSupport二、AQS 加锁流程图最关键线程开始 ↓ 判断 state 是否为 0 ↓ 是 → CAS 尝试将 state 0 → 1 ↓ 成功 → 获取锁成功设置当前线程为持有线程 ↓ 失败 / state 不为 0 ↓ 判断是否是**可重入**当前线程 持有线程 ↓ 是 → state重入成功 ↓ 否 → 封装成 Node 节点加入**CLH 队列尾部** ↓ 调用 LockSupport.park() → 线程阻塞 ↓ 等待前一个线程唤醒三、AQS 解锁流程图持有锁线程执行完毕 ↓ state 0释放锁 ↓ 唤醒队列中**第一个等待节点** ↓ 被唤醒线程尝试 CAS 获取锁 ↓ 获取成功 → 成为新的锁持有者 ↓ 原节点移除队列四、AQS 完整流程总图极简版┌─────────────┐ │ 新线程尝试加锁 │ └───────┬─────┘ ↓ ┌─────────────┐ │ state 0 ? │ └───┬─────────┬───┘ │ 是 │ 否 ↓ ↓ ┌──────────┐ ┌───────────────────┐ │ CAS 成功 │ │ 封装Node → 入队 → park阻塞 │ └───┬──────┘ └──────────┬────────┘ │ │ ↓ ↓ ┌──────────────┐ ┌───────────────┐ │ 获取锁成功 │ │ 等待前驱节点唤醒 │ └──────────────┘ └────────┬──────┘ │ ┌────────────────────────────┴─────────┐ │ 释放锁state0 │ │ 唤醒后继节点 │ └────────────────────┬─────────────────┘ ↓ 被唤醒线程重新竞争锁五、AQS 核心关键词背会面试满分state锁状态0无锁≥1有锁CAS无锁竞争修改 state 专用CLH 队列抢不到锁的线程排队,特点先进先出park / unpark阻塞与唤醒Node队列里的线程节点独占/共享两种同步模式六、一句话记住 AQS抢不到就入队入队就阻塞释放就唤醒唤醒再抢锁CAS 改状态队列来排队