序章1 Java线程 1
I1.1 Java线程 2
I1.2 何谓线程 2
明为跟踪处理流程,实为跟踪线程 2
单线程程序 3
多线程程序 4
Thread类的run方法和start方法 5
I1.3 线程的启动 9
线程的启动(1)——利用Thread类的子类 9
线程的启动(2)——利用Runnable接口 10
I1.4 线程的暂停 12
I1.5 线程的互斥处理 13
synchronized方法 14
synchronized代码块 17
I1.6 线程的协作 18
等待队列——线程休息室 19
wait方法——将线程放入等待队列 19
notify方法——从等待队列中取出线程 21
notifyAll方法——从等待队列中取出所有线程 23
wait、notify、notifyAll是Object类的方法 24
I1.7 线程的状态迁移 24
I1.8 线程相关的其他话题 26
I1.9 本章所学知识 26
I1.10 练习题 26
序章2 多线程程序的评价标准 31
I2.1 多线程程序的评价标准 32
安全性——不损坏对象 32
生存性——必要的处理能够被执行 32
可复用性——类可重复利用 33
性能——能快速、大批量地执行处理 33
评价标准总结 33
I2.2 本章所学知识 34
I2.3 练习题 34
第1章 Single Threaded Execution模式——能通过这座桥的只有一个人 35
1.1 Single Threaded Execution模式 36
1.2 示例程序1:不使用Single Threaded Execution模式的程序 36
Main类 37
非线程安全的Gate类 37
UserThread类 38
执行起来看看……出错了 39
为什么会出错呢 40
1.3 示例程序2:使用Single Threaded Execution模式的程序 41
线程安全的Gate类 41
synchronized的作用 42
1.4 Single Threaded Execution模式中的登场角色 43
1.5 拓展思路的要点 44
何时使用(可使用Single Threaded Execution模式的情况) 44
生存性与死锁 45
可复用性和继承反常 46
临界区的大小和性能 46
1.6 相关的设计模式 47
Guarded Suspension模式 47
Read-Write Lock模式 47
Immutable模式 47
Thread-Specific Storage模式 48
1.7 延伸阅读1:关于synchronized 48
synchronized语法与Before/After模式 48
synchronized在保护着什么 49
该以什么单位来保护呢 50
使用哪个锁保护 50
原子操作 51
long与double的操作不是原子的 51
1.8 延伸阅读2:java.util.concurrent包和计数信号量 52
计数信号量和Semaphore类 52
使用Semaphore类的示例程序 52
1.9 本章所学知识 55
1.10 练习题 55
第2章 Immutable模式——想破坏也破坏不了 61
2.1 Immutable模式 62
2.2 示例程序 62
使用Immutable模式的Person类 62
Main类 63
PrintPersonThread类 63
2.3 Immutable模式中的登场角色 65
2.4 拓展思路的要点 66
何时使用(可使用Immutable模式的情况) 66
考虑成对的mutable类和immutable类 [性能] 66
为了确保不可变性 [可复用性] 67
标准类库中用到的Immutable模式 67
2.5 相关的设计模式 69
Single Threaded Execution模式 69
Read-Write Lock模式 69
Flyweight模式 69
2.6 延伸阅读1:final 69
final的含义 69
2.7 延伸阅读2:集合类与多线程 71
示例1:非线程安全的java.util.ArrayList类 71
示例2:利用Collections.synchronizedList方法所进行的同步 74
示例3:使用copy-on-write的java.util.concurrent.CopyOnWriteArrayList类 75
2.8 本章所学知识 76
2.9 练习题