这门课解决什么问题,适合什么基础
很多写过 Java 多线程的人,对 ReentrantLock 的认知只停留在会用 lock 和 unlock,一旦被问到“它底层怎么管排队线程”“state 到底代表什么”“公平锁和非公平锁在源码上差在哪”,就开始含糊其辞。这门课就是针对这种“只会调 API、不懂底层调度机制”的能力缺口。它不教并发基础概念,默认你已经清楚线程生命周期、synchronized 基本用法、volatile 语义。如果你连 CAS 和自旋都没听过,建议先补完这些再来看,否则跟着视频走会卡在 AbstractQueuedSynchronizer 的双向队列入队逻辑上。课程直接切入源码层,从 ReentrantLock 加锁流程拆到 AQS 的核心设计,最后落到自己动手写同步组件,目标是让你从“会用并发工具”变成“能看懂并改造并发底层机制”。
建议先看哪几块,怎么配合资料练
不要按目录顺序从头到尾刷,建议先看 ReentrantLock 加锁源码这一节,再折回去看 AbstractQueuedSynchronizer 的整体设计,最后拿“自己实现同步组件”那节做收口。先看加锁流程,是因为它有一个具体的业务场景做抓手,你能看到线程抢锁失败后怎么被包装成 Node 扔进队列、park 在哪里、被谁唤醒。有了这个画面感,再去看 AQS 的抽象结构,才不会对着 state 和双向链表的指针操作发呆。配套练习上,不要只用眼睛看视频,必须打开 IDE 跟着断点走。把 ReentrantLock 的非公平锁加锁过程打上断点,起两个线程互相争抢,在 debug 里观察 head、tail 指针的变化和 waitStatus 的流转。资料包里的源码片段别只当文档存着,要当成填空题:先看一遍视频,关掉视频自己对着注释写加锁入队逻辑,写卡住了再回去看视频里的写法,这样比纯跟读有效得多。
学完能独立做什么
学完之后,你应该能独立干几件事:第一,拿到任何一个基于 AQS 的同步组件,比如 ReentrantReadWriteLock、CountDownLatch,能自己读源码说清楚它怎么复用 AQS 的模板方法、怎么重写 tryAcquire 和 tryRelease;第二,能对着一段并发业务代码,判断出当前锁会不会饿死某个线程、队列里积压的 Node 在什么条件下会被唤醒;第三,能自己写一个同步组件,比如限定同时只有三个线程能访问的共享锁,或者一个只允许单次获取的不可重入锁。检验标准很简单:关掉所有资料,手写一个基于 AQS 的简易锁,能跑通基本加锁解锁,能正确处理一个线程被打断时的队列节点清理。如果写不出来,说明你对 acquireQueued 里那个自旋判断前驱节点的逻辑还没吃透,回去把那一小段反复看。别用“看过了”骗自己,源码这东西,看懂和能默写出来之间差着一整条双向队列的距离。
课程目录
1-1 [并发编程之AQS源码分析] ReentrantLook源码分析、加锁 (41:24) 1-2 [并发编程之AQS源码分析] AbstractQueuedSynchronizer(AQS (33:57) 1-3 [并发编程之AQS源码分析] 如何自己实现一个同步组件 (25:48)





