Java 并发资料很容易越学越碎:线程基础、锁、线程池、AQS、ThreadLocal、异步、死锁、高 CPU 排查,每个点都能展开很多。比较稳的做法,是先把它拆成几条主线。
线程基础和锁
第一条主线是线程基础和锁。
这里可以放:
- 线程生命周期。
synchronized。volatile。Lock。- 死锁。
jstack。- this 引用逸出。
SimpleDateFormat线程安全。
这部分要重点理解“共享状态”和“可见性”。很多并发问题不是线程 API 不会用,而是没有先判断哪些数据会被多个线程同时访问。
线程池和异步
第二条主线是线程池与异步。
常见内容包括:
- 线程池参数。
- 队列选择。
- 拒绝策略。
- 线程间协作。
- Spring Async。
CompletableFuture。
线程池不是为了把任务随便丢到后台。它要解决的是并发边界、资源隔离和任务调度问题。
整理线程池资料时,建议记录三个问题:
- 任务是 CPU 密集还是 IO 密集。
- 队列是否可能积压。
- 失败后是否需要补偿或告警。
并发工具和排障
第三条主线是并发工具与排障。
可以放:
ThreadLocal。- AQS。
- RateLimiter。
- 异步 IO。
- 进程线程排查。
- 高 CPU 定位。
- 线程堆栈分析。
这些内容更偏工程实践。比如高 CPU 排查,通常要从 top 找线程,再转十六进制线程 ID,最后用 jstack 对应到代码位置。
学习顺序
建议顺序是:
- 先学线程基础和共享变量。
- 再看
synchronized、volatile和锁。 - 然后学线程池和异步。
- 最后补 ThreadLocal、AQS、限流和排障。
不要一开始就钻 AQS 源码。先把日常代码里最容易出错的线程安全、线程池参数和死锁排查搞清楚,更有收益。
维护建议
Java 并发索引页只做入口,不要堆所有细节。可以把正文拆成:
- 并发基础与锁。
- 线程池与异步。
- 并发工具与排障。
以后遇到问题时,先判断它是“理解问题”“资源配置问题”还是“线上排障问题”,再补到对应专题里。
正文完




