第1章 多线程原理与实战

1.1 两个技术面试故事

1.2 无处不在的进程和线程

1.2.1 进程的基本原理

进程的定义:
进程是程序的一次执行,应用程序以进程的形式,运行于操作系统之上,享受操作系统提供的服务。

进程的结构:
一般来说,一个进程一般由程序段(代码段)、数据段和进程控制块三部分组成。
alt text
📌 PCB主要由四大部分组成
📌 (1)进程的描述信息
📌 (2)进程的调度信息
📌 (3)进程的资源信息
📌 (4)进程上下文

Java程序的进程:
Java编写的程序都运行在java虚拟机(JVM)中,每当使用java命令启动一个java程序时,就会启动一个JVM进程。在这个JVM进程内部,所有Java程序代码的运行都是以线程来运行的。

1.2.2 线程的基本原理

线程的定义:
线程是指“进程代码段”的一次顺序执行流程。线程是cpu调度的最小单位。一个进程可以有多个线程,各个线程共享进程的内存空间、系统资源,进程是操作系统资源分配的最小单位。

线程的大致结构:
一个标准的线程主要有以下三部分组成:线程描述信息、程序计数器(PC)和栈内存组成。📌 程序计数器很重要,它记录着线程下一条指令的代码段内存地址。
alt text

Java程序的主线程:
JVM找到程序的main()方法,然后运行main()方法,这就产生了一个线程,这个线程称为主线程。当main()方法结束后,主线程运行完成。JVM进程也随机退出。

1.2.3 进程与线程的区别

(1)线程是”进程代码段”的一次的顺序执行流程。一个进程由一个或多个线程组成,一个进程至少有一个线程。
(2)线程是CPU调度的最小单位,进程是操作系统分配资源的最小单位。线程的划分尺度小于进程,使得多线程程序的并发性高。
(3)线程是出于高并发的调度诉求,从进程内部演进而来。线程的出现,既充分发挥CPU的计算性能,弥补进程调度的过于笨重。
(4)进程之间是相互独立的,但进程内部各个线程之间,并不完全独立。各个线程之间共享进程的方法区内存、堆内存、系统资源(文件句柄、 系统信号等等)。
(5)切换速度不同:线程上下文切换比进程上下文切换要快得多。所以,有的时候,线程也称之为轻量级进程。

1.3 创建线程的4种方法

Thread类是Java中创建线程的基础。

1.3.1 Thread类详解

alt text

1.4 线程的核心原理

1.5 线程的基本操作

1.6 线程池原理与实战

1.7 确定线程池的线程数

1.8 ThreadLocal原理与实战

第2章 Java内置锁的核心原理

2.2 synchronized关键字

2.3 生产者-消费者问题

2.4 Java对象结构与内置锁

2.5 偏向锁的原理与实战

2.6 轻量级锁的原理与实战

2.7 重量级锁的原理与实战

2.8 偏向锁、轻量级锁与重量级锁的对比

2.9 线程间通信

第3章 CAS原理与JUC原子类

3.2 JUC原子类

3.3 对象操作的原子性

3.4 ABA问题

3.5 提升高并发场景下CAS操作的性能

3.6 CAS在JDK中的广泛应用

第4章 可见性与有序性的原理

4.2 并发编程的三大问题

4.3 硬件层的MESI协议原理

4.4 有序性与内存屏障

4.5 JMM详解

4.6 Happens-Before规则

4.7 volatile不具备原子性

第5章 JUC显式锁的原理与实战

5.2 悲观锁和乐观锁

5.3 公平锁与非公平锁

5.4 可中断锁与不可中断锁

5.5 共享锁与独占锁

5.6 读写锁

第6章 AQS抽象同步器的核心原理

6.2 AQS的核心成员

6.3 AQS中的模板模式

6.4 通过AQS实现一把简单的独占锁

6.5 AQS锁抢占的原理

6.6 AQS的两个关键点:节点的入队和出队

6.7 AQS锁释放的原理

6.8 ReentrantLock的抢锁流程

6.9 AQS条件队列

6.10 AQS的实际应用

第7章 JUC容器类

7.2 JUC高并发容器

7.3 CopyOnWriteArrayList

7.4 BlockingQueue

7.5 ConcurrentHashMap

第8章 高并发设计模式

8.2 Master-Worker模式

8.3 ForkJoin模式

8.4 生产者-消费者模式

8.5 Future模式

第9章 高并发核心模式之异步回调模式

9.2 join:异步阻塞之闷葫芦

9.3 FutureTask:异步调用之重武器

9.4 异步回调与主动调用

9.5 Guava的异步回调模式

9.6 Netty的异步回调模式

9.7 异步回调模式小结

第10章 CompletableFuture异步回调

10.2 异步任务的串行执行

10.3 异步任务的合并执行

10.4 异步任务的选择执行

10.5 CompletableFuture的综合案例

参考文献或转载相关: