学习地图

并发编程不是「会写 synchronized」就够了。我按由浅入深的顺序给自己划了一条路线:先搞清线程生命周期与中断语义,再理解 JMM 带来的可见性与有序性问题;接着用 CAS 和原子类解决简单计数场景,遇到复杂互斥再落到 AQS 及其衍生锁;最后把线程池参数调优和 Java 21 虚拟线程纳入工程实践。

自检清单

  • 能否解释「创建线程」与「启动线程」的区别?
  • 能否画出 happens-before 在 volatile 写/读上的作用?
  • 能否说明为什么线程池不建议用 Executors 静态工厂?

小练习

用两个线程交替打印 A/B 各 10 次,分别尝试 synchronized、ReentrantLock 和 Semaphore,体会 API 差异与可读性权衡。

课堂外的思考

学习「Java 并发编程专题:线程、锁、JMM、CAS、AQS、线程池与虚拟线程」时,我把自己放在线上值班的情境里:如果告警与这一主题相关,我能否在较短时间内建立假设并用数据验证?这种提问方式逼迫我从「看过」变成「讲得清楚、做得到」,也避免笔记沦为标题摘抄。

与同事的讨论方式

我会用白板画出状态机、内存布局或调用链,请同事挑错。若被追问「更高并发或更老 JDK 版本会怎样」,答不上来就回到文首原文链接查 primary source,而不是凭记忆硬编。讨论后把新认识补进笔记末尾。

可复现实验

为每个主题保留最小复现:一段可运行的 Java 片段、一条 jcmd/jstack 命令,或一组压测对比。记录环境(JDK 小版本、CPU 核数、容器限制),结论才可靠。实验细节不必全部公开,但索引要能找到。

补充复习

把本篇三个关键词写入间隔重复卡片,并各关联一个真实项目场景;暂时用不到的概念标记「待实践」,避免笔记只增不用。