一、思维导图之Java并发
二、并发源码阅读说明
阅读“源码”很难,阅读“并发源码”更难,因为“并发源码”相对“非并发源码”需要考虑更多细节,比如“以CAS自旋形式实现乐观锁”的并发源码。
2.1、明确阅读目标
阅读“并发源码”时,首先须明确阅读目标:
- 目标是“理解核心基本流程”,那么就没必要追究太多细节,比如“阅读AQS”,“阅读Exchanger”
- 目标是“彻底掌握”,那么就不只需要理解,也要追究清楚所有细节,即便需要花费很多时间和精力
2.2、具体阅读指南
并发源码阅读指南:阅读源码主体,需要考虑到“可见性”、“有序性”和“原子性”这3个问题,可使用语言提供的语义确保机制和隐含的内存屏障,比如:
- volatile关键词语义
- final关键词语义
- volatile变量写操作之前有LoadStore和StoreStore内存屏障
- volatile变量读操作之后有LoadStore和LoadLoad内存屏障
- happens-before规则,使用happens-before规则进行分析最简单,但小心不要踩“混用”的坑,可参见《happens-before规则》中的“5.1、例子1”小节