本课时的主要内容是 Java 的多线程和并发。重点知识有线程的状态转换、线程的同步与互斥、线程池的运作机制详解,以及 JUC 中常用的工具类。
多线程知识点
多线程协作时,因为对资源的锁定与等待会产生死锁,这里需要了解产生死锁的四个基本条件,要明白竞争条件与临界区的概念,知道可以通过破坏造成死锁的 4 个条件来防止死锁。
前面讲过进程间的通信方式,这里还要知道线程间的通信方式,通信主要指线程之间的协作机制,例如 wait、notify 等。
还需要知道 Java 为多线程提供的一些机制,例如 ThreadLocal 用来保存线程独享的数据, Fork/Join 机制用于大任务的分割与汇总,Volatile 对多线程数据可见性的保证,以及线程的中断机制。
其他还有:ThreadLocal 的实现机制。Fork/Join 的工作窃取算法等内容。
详解线程状态转换
线程是 JVM 执行任务的最小单元,理解线程的状态转换是理解后续多线程问题的基础。在 JVM 运行中,线程一共有 NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED 六种状态,这些状态对应 Thread.State 枚举类中的状态。
如下图所示,当创建一个线程时,线程处在 NEW 状态,运行 Thread 的 start 方法后,线程进入 RUNNABLE 可运行状态。<