Java并发编程 - 图1

1 Java内存模型(JMM)

基础要求:
●理解多线程是如何提高程序的扩展能力
● 为什么需要JMM,它试图解决什么问题?
● JMM是如何解决可见性等各种问题的?类似volatile,体现在具体用例中有什么效果?
●理解线程状态的切换,以及和锁等并发工具类的互动。

进阶要求:
● 从源码层面,理解synchronized的底层实现。
● 从源码层面,理解volatile的底层实现。
● 从JVM层面,理解Java对象模型在并发中的基本组成

2 并发基础

基础要求:
●掌握什么场景下,可以采用CAS技术。
●掌握常用atomic类型基本组成和使用案例。

进阶要求:
●理解atomic的底层实现原理。
使用Unsafe不是大多数场景的最好选择,有没有更加推荐的方式
●CAS更加底层是如何实现的

3 锁

基础要求:
● 理解什么是线程安全。
●ReentrantLock基本概念、基本使用案例和设计原理。
●完成一个可能死锁的程序。
●了解诊断死锁都有哪些工具。
●了解如何在编程中尽量避免一些典型场景的死锁。
● 理解锁膨胀、降级;理解偏斜锁、自旋锁、轻量级锁、重量级锁等概念。

进阶要求:
●对ReentrantLock、CyclicBarrier等并发结构底层的实现技术的理解。
● 掌握并发包中java.util.concurrent.lock各种不同实现和案例分析。

4 线程池

基础要求:
● 掌握Executor框架的主要内容,至少要了解组成与职责,掌握基本开发用例中的使用。
● 对线程池和相关并发工具类型的熟练使用并理解原理。

进阶要求:
● 对线程池和相关并发工具类型源码层面理解。
● 实践中有哪些常见问题,基本的诊断思路。
● 如何根据自身系统特点合理自定义使用线程池。

5 并发工具类

基础要求:
●从总体上,把握住几个主要组成部分。
●理解具体设计、实现和能力。
●再深入掌握一些比较典型工具类的适用场景、用法甚至是原理,并熟练写出典型的代码用例。

进阶要求:
●从源码层,理解各种工具里的具体实现。

6 Java并发集合

基本要求:
●掌握不同容器的基本组成和使用案例

进阶要求:
●理解不同容器的底层实现

7 并发队列

基础要求:
●哪些队列是有界的,哪些是无界的?
●针对特定场景需求,如何选择合适的队列实现?

进阶要求:
●从源码的角度,常见的线程安全队列是如何实现的,并进行了哪些改进以提高性能表现?

8 其他

基础要求:
●理解ThreadLocal基本概念,掌握常见用法,了解大致实现原理
●了解ThreadLocal的内存泄露问题及注意事项
●掌握Fork/Join中的分治的思想
●了解Fork/Join框架的适用场景

进阶要求:
●理解如何解决父子线程之间的传递
●理解Fork/Join实现原理与代码实现