缺什么补什么:别把 synchronized 当黑盒背
很多转岗或查漏补缺的开发者,对 synchronized 的认知停留在“加锁能保证线程安全”这一层。真问到对象头长什么样、锁怎么升级、重量级锁为什么要走操作系统,就开始含糊其辞。这门课就是针对这种“只会用、不懂底层”的能力缺口。它不教你怎么写多线程业务代码,而是把 Java 对象在内存里的布局、synchronized 在虚拟机层面的工作机制,以及后续引入的锁优化策略掰开揉碎讲清楚。适合已经写过并发代码、能跑通基本多线程案例,但没系统看过虚拟机实现细节的人。如果你连线程创建和 Runnable 都不熟,建议先补基础再来看,否则会被对象头和 monitor 概念卡住。
建议先看哪几块,配套怎么练
从线索看,内容是按“对象布局—底层原理—优化策略”三步递进的,建议严格按顺序看,不要跳。第一块讲 Java 对象布局,这是理解锁的物理载体,必须先弄清对象头里 Mark Word 的结构,否则后面锁状态怎么记录无从谈起。第二块讲 synchronized 底层工作原理,重点看 monitor 机制和字节码层面的 monitorenter、monitorexit 指令,搞清楚加锁解锁到底在虚拟机里做了什么动作。第三块讲优化原理,重点盯偏向锁、轻量级锁、重量级锁的升级路径和触发条件,这是面试和实战中最容易拉开差距的部分。资料配合练习时,不要只看视频,要自己写代码验证:用 JOL 打印对象头,在不同竞争程度下观察 Mark Word 变化;写一段多线程自增代码,用 jstack 或 jconsole 观察线程状态,看什么时候是 RUNNABLE、什么时候 BLOCKED。看懂和能复现是两回事,动手跑一遍才记得住。
学完能独立做什么、能回答什么
学完之后,你应该能脱离死记硬背,独立分析具体的并发问题。比如别人问“synchronized 锁的是对象还是代码”,你能从对象头角度解释清楚;问“ synchronized 和 ReentrantLock 底层有什么本质区别”,你能说出一个靠虚拟机层面 monitor、一个靠 AQS 队列,而不是只会背“一个是关键字一个是类”。看完应能回答这几个核心问题:一个 Java 对象在内存中由哪几部分组成、对象头里存了哪些锁相关信息、synchronized 从无锁到偏向锁到轻量级锁再到重量级锁是怎么一步步升级的、升级的触发条件分别是什么、为什么说 synchronized 在现代虚拟机里已经不“重”了。能答清楚这些,说明底层原理这块缺口补上了;答不上来,就回去重新跑 JOL,别假装都会。
课程目录
1-1 [Java的对象布局] Java的对象布局 (47:21) 1-2 [Java的对象布局] Synchronized底层工作的原理 (28:28) 1-3 [Java的对象布局] Synchronized优化原理+学习方法 (31:24)





