如果你写过 synchronized,用过 ReentrantLock,也往线程池里丢过任务,但被问到「AQS 里的 state 到底谁在改」「读写锁为什么能同时读」「CAS 失败之后线程去哪了」时答不上来,这门课就是补这块的。它不教你怎么 new 一个线程,而是把 JUC 包里那些你天天调用、却从没打开看过的类,一个个拆到源码层面。

先确认你缺的是哪一块

并发能力的缺口通常分三层。第一层是 API 层:知道有 Lock、有 Semaphore、有 CountDownLatch,会照着例子用。第二层是模型层:能说清可见性、有序性、原子性各自对应什么问题,知道 volatile 管什么、不管什么。第三层是源码层:能指着 AQS 的 acquire 说清一个线程从抢锁失败到挂起、再到被唤醒后重新竞争的完整链路。

大多数人卡在第二层到第三层之间。API 会背,八股能答,但面试官一追问实现细节就开始含糊。这门课的目标就是把第三层打通——不是让你背源码,而是让你读完之后,看到任何一个基于 AQS 实现的同步器,都能自己推出它大概怎么写的。

课程真正啃的几块硬骨头

  • AQS 与同步器家族。这是整个 JUC 的地基。独占模式、共享模式、Node 队列、条件队列、中断与超时的处理分支,理清了这一块,ReentrantLock、Semaphore、CountDownLatch、ReentrantReadWriteLock 基本就都是同一套骨架换皮。
  • 原子类与 CAS 的边界。不只知道 AtomicInteger 怎么用,还要知道它为什么在竞争激烈时会自旋空转、ABA 问题在什么场景下才真的会咬人、LongAdder 又是靠什么把热点分散开的。
  • 读写锁与锁降级。读读不互斥、读写互斥、写写互斥是怎么落到 state 的高低 16 位上的,以及为什么锁降级可以、锁升级不行。
  • 线程池与阻塞队列。参数背后的取舍,任务提交后的完整流转路径,以及队列选错会带来什么后果。
  • 并发容器与内存模型。ConcurrentHashMap 的分段演进、扩容时的协助迁移,配合 JMM 的 happens-before 规则一起看,才知道那些设计不是拍脑袋。

看的时候别只看,动手改

源码分析类的课最容易变成「看的时候都懂,合上视频就忘」。建议每个组件都配一个动作:看完 AQS 的独占锁流程,自己写一个极简的不可重入锁,只实现 lock/unlock 和阻塞队列;看完原子类,用 AtomicFieldUpdater 给一个已有类加上原子字段更新;看完线程池,改一次核心参数,用一段会打日志的任务观察线程数的实际变化。

调试手段也要跟上。看 AQS 时把断点打在对列节点的入队和唤醒处,观察线程状态从 RUNNABLE 到 WAITING 的切换;看并发容器时打印扩容前后的桶数量。这些观察比记住结论有用得多,因为结论会忘,现象不会。

看完应该能回答这些问题

  • 一个线程调用 lock() 没抢到锁,到它被唤醒重新竞争,中间经过了哪几个状态、哪些方法?
  • 公平锁和非公平锁在源码上的差别只有几行,为什么性能表现不同?
  • ReentrantReadWriteLock 用一个 int 同时表示读锁和写锁,具体怎么切分、怎么判断?
  • CAS 自旋在什么情况下反而比加锁更慢?该怎么绕开?
  • 线程池的队列满了之后,拒绝策略是在哪一步被触发的?
  • ConcurrentHashMap 扩容时其他线程为什么能一起帮忙搬数据?

如果这些问题你现在只能答个大概,那就别急着往下翻。把每一块源码读到能自己画出流程图,再回头看这些问题,答案会自己浮出来。并发这块没有捷径,但有了正确的切入顺序,能少绕很多弯路。

JUC并发编程与源码分析视频课

深入理解JUC并发编程原理与源码

编辑点评

系统剖析JUC核心组件,深入源码分析,提升并发编程能力。

⭐ 编辑推荐

本课程深入解析Java并发编程框架JUC,涵盖AQS、原子类、读写锁等核心组件,通过源码分析提升并发编程技能。

课程亮点

• JUC核心组件深入解析
• 源码级分析提升并发编程
• 系统化学习并发编程框架

课程目录

📁 视频
    说明.zip  [484.0 B]
    47_LongAdder源码分析03.mp4  [41.9 MB]
    42_LongAdder高性能对比.mp4  [80.0 MB]
    72_有没有比读写锁更快的锁.mp4  [82.0 MB]
    01_前言.mp4  [45.0 MB]
    66_AQS突破口lock方法.mp4  [34.7 MB]
    26_happens-before.mp4  [102.5 MB]
    24_多个通行证演示.mp4  [32.0 MB]
    51_强引用.mp4  [48.8 MB]
    44_LongAdder为什么这么快2.mp4  [36.5 MB]
    35_自旋锁.mp4  [61.5 MB]
    21_粉丝福利加课说简历编写.mp4  [199.1 MB]
    56_对象头的MarkWord.mp4  [49.2 MB]
    08_get和join方法.mp4  [59.2 MB]
    36_ABA问题解决.mp4  [94.8 MB]
    09_大厂真实案例比价需求.mp4  [154.2 MB]
    13_速度优选和对计算结果进行合并.mp4  [51.9 MB]
    64_AQS理论.mp4  [46.1 MB]
    37_基本类型原子类.mp4  [64.2 MB]
    06_CompletableFuture.mp4  [45.0 MB]
    54_ThreadLocal如何避免内存泄漏.mp4  [83.9 MB]
    38_数组类型原子类.mp4  [12.4 MB]
    50_ThreadThreadLocalThreadLocalMap 关系.mp4  [107.2 MB]
    49_ThreadLocal最佳实践.mp4  [150.9 MB]
    67_AQS源码分析01.mp4  [298.0 MB]
    70_读写锁的演变2.mp4  [34.8 MB]
    40_对象的属性修改原子类.mp4  [100.7 MB]
    65_AQS内部结构.mp4  [95.1 MB]
    27_volatile之四类内存屏障指令.mp4  [134.0 MB]
    22_Object类中的wait和notify方法实现线程等待和唤醒.mp4  [41.8 MB]
    31_内存屏障2次复习.mp4  [112.0 MB]
    68_AQS源码分析02.mp4  [225.8 MB]
    11_获得结果和触发计算.mp4  [38.3 MB]
    18_可重入锁.mp4  [104.1 MB]
    …(已达 35 条上限,后续省略)

适合人群

  • Java后端开发人员
  • 对并发编程有深入需求的技术人员

学习收获

掌握JUC核心组件原理
提升并发编程能力
增强系统性能优化能力

祝您学习愉快!

学有所成,前程似锦!