第1章绪论1
1.1概述1
1.2并发与并行2
1.2.1并发2
1.2.2并行3
1.3Flynn分类4
1.4并行编程模型4
1.4.1多线程并行模型4
1.4.2共享内存并行模型5
1.4.3分布式并行模型6
1.4.4混合并行编程模型7
1.4.5数据并行模型7
1.5并行程序设计方法8
1.5.1分治8
1.5.2流水线9
1.5.3消息传递10
1.6加速比10
1.6.1阿姆达尔定律10
1.6.2高斯特凡定律11
1.7并行程序评判标准11
1.8Java并行13
1.8.1并行特性13
1.8.2内存模型14
1.9程序运行说明15
习题17
第2章线程18
2.1基本概念18
2.1.1进程与线程18
2.1.2超线程18
2.2线程的创建19
2.2.1不带返回值的线程——从Thread类继承19
2.2.2不带返回值的线程——实现Runnable接口22
2.2.3带返回值的线程——实现Callable接口24
2.2.4简化线程创建代码25
2.3线程的属性28
2.3.1线程标识符28
2.3.2线程名30
2.3.3线程状态34
2.3.4优先级37
习题41
并行编程目录第3章线程的管理42
3.1线程数目的确定42
3.2线程运行的控制43
3.2.1等待线程执行完毕43
3.2.2休眠47
3.2.3中断48
3.2.4让出CPU的使用权50
3.3守护线程52
3.4线程分组55
3.5线程本地化58
3.6线程开销问题60
习题62
第4章锁63
4.1概述63
4.2基本概念63
4.2.1数据竞争63
4.2.2线程安全64
4.2.3临界区65
4.2.4监视器65
4.3为什么使用同步控制66
4.4同步锁68
4.4.1同步方法68
4.4.2同步块70
4.5可重入锁72
4.6读写锁80
4.7邮戳锁87
4.8锁的缺点94
4.8.1锁竞争94
4.8.2优先权反转95
4.8.3死锁95
4.8.4活锁98
4.9本章小结100
习题101
第5章原子操作102
5.1原子性102
5.2基本类型的原子操作103
5.3引用类型的原子操作106
5.4ABA问题108
5.5扩展的原子引用类型111
5.5.1类AtomicMarkableReference111
5.5.2类AtomicStampedReference114
5.6原子操作数组类117
5.7volatile关键字122
5.7.1可见性122
5.7.2原子性122
5.7.3指令重排122
5.8本章小结123
习题124
第6章异步模式125
6.1基本概念125
6.1.1同步和异步125
6.1.2阻塞和非阻塞125
6.1.3回调126
6.1.4I/O密集型任务和计算密集型任务126
6.2接口Future126
6.3类FutureTask127
6.4类CompletableFuture133
6.4.1类的定义133
6.4.2创建对象133
6.4.3获取返回值134
6.4.4执行模型135
6.4.5多个异步任务处理144
6.4.6使用回调函数147
6.4.7综合应用实例152
6.5本章小结155
习题156
第7章线程协作157
7.1通过共享变量进行协作157
7.2等待集合160
7.3等待与通知160
7.4条件变量168
7.5交换器174
习题178
第8章线程障栅179
8.1概述179
8.2循环障栅179
8.3倒计时门闩184
8.4信号量188
8.5阶段193
习题201
第9章线程池管理202
9.1线程池202
9.1.1为什么使用线程池202
9.1.2相关接口和类202
9.1.3应用举例207
9.2固定数目的线程池209
9.3延迟执行、周期性执行的执行器214
9.4取消任务的执行219
9.5任务装载和结果处理的分离220
9.6管理被拒绝的任务223
习题225
第10章并行模式Fork/Join226
10.1基本概念226
10.1.1任务划分226
10.1.2负载均衡227
10.1.3工作窃取227
10.2Fork/Join框架的编程模式228
10.3线程池ForkJoinPool229
10.3.1创建ForkJoinPool对象229
10.3.2使用ForkJoinPool230
10.4任务ForkJoinTask231
10.4.1从类RecursiveAction继承创建任务232
10.4.2从类RecursiveTask继承创建任务238
10.4.3任务的运行方式242
10.4.4任务的取消245
10.5本章小结247
习题248
第11章线程安全的集合249
11.1线程安全的哈希表249
11.1.1类ConcurrentHashMap249
11.1.2类HashTable252
11.1.3方法Collections.synchronizedMap253
11.2线程安全的双端队列253
11.3线程安全的跳表257
11.4同步队列259
11.5随机数产生262
11.6并行流264
11.6.1函数式接口Predicate264
11.6.2流的创建265
11.6.3流的操作266
习题268
第12章定制并行类269
12.1定制同步类269
12.1.1定制锁269
12.1.2定制原子操作272
12.2定制线程工厂275
12.3定制线程池277
12.4定制线程执行器279
12.5定制周期性任务281
12.6定制与Fork/Join框架相关的并发类285
12.6.1类ForkJoinWorkerThread285
12.6.2接口ForkJoinPool.ForkJoinWorkerThreadFactory285
12.6.3自定义Fork/Join框架中的线程285
12.6.4自定义任务288
习题291
第13章并行程序设计实例292
13.1桶排序及其并行化292
13.1.1桶排序过程292
13.1.2并行化292
13.2奇偶排序及其并行化297
13.2.1奇偶排序算法的过程297
13.2.2并行化300
13.3加密/解密算法及其并行化306
13.3.1加密/解密过程及相关代码306
13.3.2并行化314