第1部分 线程API 2
第1章 Thread和Runnable 2
1.1 Thread和Runnable简介 2
1.1.1 创建Thread和Runnable对象 3
1.1.2 获取和设置线程状态 4
1.1.3 启动线程 9
1.2 操作更高级的线程任务 12
1.2.1 中断线程 12
1.2.2 等待线程 16
1.2.3 线程睡眠 20
1.3 练习 23
1.4 小结 24
第2章 同步 26
2.1 线程中的问题 26
2.1.1 竞态条件 26
2.1.2 数据竞争 28
2.1.3 缓存变量 29
2.2 同步临界区的访问 30
2.2.1 使用同步方法 32
2.2.2 使用同步块 33
2.3 谨防活跃性问题 34
2.4 volatile和final变量 39
2.5 练习 48
2.6 小结 50
第3章 等待和通知 52
3.1 等待/通知API一览 52
3.2 生产者和消费者 55
3.3 练习 65
3.4 小结 66
第4章 额外的线程能力 67
4.1 线程组 67
4.2 线程局部变量 73
4.3 定时器框架 77
4.3.1 深入Timer 81
4.3.2 深入TimerTask 85
4.4 练习 87
4.5 小结 88
第2部分 并发工具类 90
第5章 并发工具类和Executor框架 90
5.1 并发工具类简介 90
5.2 探索Executor 91
5.3 练习 103
5.4 小结 105
第6章 同步器 106
6.1 倒计时门闩 106
6.2 同步屏障 111
6.3 交换器 119
6.4 信号量 126
6.5 信号量和公平策略 127
6.6 Phaser 136
6.7 练习 139
6.8 小结 140
第7章 锁框架 142
7.1 锁 143
7.2 重入锁 145
7.3 条件 149
7.4 读写锁 157
7.5 重入读写锁 158
7.6 练习 165
7.7 小结 166
第8章 额外的并发工具类 167
8.1 并发集合 167
8.1.1 使用BlockingQueue和ArrayBlockingQueue 169
8.1.2 深入学习ConcurrentHashMap 172
8.2 原子变量 173
8.3 Fork/Join框架 179
8.4 Completion Service 190
8.5 练习 194
8.6 小结 196
第3部分 附录 198
附录A 练习题答案 198
附录B Swing中的线程 225
B.1 单线程编程模型 225
B.2 线程化API 231
B.2.1 SwingUtilities和EventQueue 231
B.2.2 SwingWorker 240
B.2.3 定时器 245
B.3 基于定时器的幻灯片展示 249