0. 背景
某次项目交付中发现受限于客户物理机性能,无法将接口的rt由100s,优化至预期的5s,期间排查了好多种原因,磕磕绊绊最终才定位到问题;这才发现自己并没有搞清楚JUC,大多情况更多是:
- 性能不够就起个线程池
- 遇到竟态条件就无脑加锁调试;
花了好多不必要的时间,也给项目带来了很大的风险,故想再系统的学习一遍JUC以绝后患。
本文仅结合自身情况,制定的JUC学习计划,并不一定适合所有同学。预计通过刷书,刷优质博客,复盘工作场景的方式,巩固并发编程基础,提升并发场景下解决问题的能力。
1. 学习资源
- 书单
- 《Java并发编程实战》Brian Goetz 机械工业出版社
- 《Java并发编程艺术》方腾飞 机械工业出版社
- 以下用于查缺补漏作为工具书
- 《趣话计算机底层技术》轩辕之风 电子工业出版社 (补充一些常识性的底层知识)
- 《ONJAVA 进阶卷》Bruce Eckel 人民邮电出版社
- 《Java核心技术卷Ⅰ》Cay S.Horstmann 机械工业出版
- 博客
- https://github.com/CL0610/Java-concurrency
- 视频(没看过,也不打算看,仅列举两个热门视频)
- 《尚硅谷》https://www.bilibili.com/video/BV1Kw411Z7dF/
- 《黑马》https://www.bilibili.com/video/BV16J411h7Rd/?vd_source=07f0400fb1a391b638b07b3696b90011
2. 计划
由于工作日每天大概只有1-2个小时的时间,周六日只有8~12小时的时间,所以进度会慢一些
1.1 并发编程相关概念(第一周)
《Java并发编程艺术》1-2章,《趣话计算机底层技术》1-5章《ONJAVA 进阶卷》《Java核心技术卷Ⅰ》查缺补漏;
中午摸鱼的时候可以看CL0610中的博客
- 线程和进程
- 线程状态
- 死锁
- Java内存模型
1.2 Java内存模型 (第二周)
《Java并发编程艺术》 3章
- 重排序
- happend-before
- volatile、锁、final的被创业板语义
- JMM
1.3 Java并发编程基础 (第三周)
《Java并发编程艺术》 4-5章
- 线程的创建和终止方式
- 线程间通信方式
- Lock
- 队列同步器
- 重入锁
- 读写锁
- LockSupport
- Condition
1.4 JUC实践 (第四周)
《Java并发编程艺术》 6-8章
- 线程安全容器类
- 阻塞队列
- Fork/Join
- 原子操作类
- 并发工具类
1.5 线程池和Executro框架 (第五周)
《Java并发编程艺术》9-10章
- 线程池的底层实现
- 线程池的基本参数
- 线程池的使用
- Executor框架两级调度、结构、成员
- 几种Executor的使用
- FutrueTask
1.6 Java并发编程实践 (第6周)
《Java并发编程艺术》11章
- 生产者消费者模式场景搭建
- 线上问题定位的一系列tricky技巧
- 性能测试
- 异步任务调度