《并发编程理论与实践》PDF下载

  • 购买积分:11 如何计算积分?
  • 作  者:张杨著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2019
  • ISBN:9787302516781
  • 页数:278 页
图书介绍:本书在Java编程语言的基础上,对并发编程的相关概念、基本原理、方法和技术进行了详细讲解,内容涉及线程同步和障栅、线程间通信、执行器、Fork/Join框架和并行流处理等内容。本书在讲解并发编程基本知识的同时,大量使用实例进行演示,力求做到明白透彻。

第1章 绪论 1

1.1 概述 1

1.2 概念和术语 2

1.2.1 并发与并行 2

1.2.2 串行执行和顺序执行 4

1.2.3 超线程 4

1.2.4 加速比 5

1.3 Java并发方面的特性 5

1.4 并发卐并行程序设计的方法 6

1.4.1 分治方法 6

1.4.2 流水线 7

1.4.3 消息传递 8

1.5 并发程序的评判标准 8

1.6 Java内存模型 9

1.7 程序的运行说明 10

第2章 线程 13

2.1 进程与线程 13

2.2 线程的创建 14

2.2.1 继承Thread类 14

2.2.2 实现Runnable接口 16

2.2.3 两种方法的比较 18

2.2.4 相关说明 18

2.3 线程的属性 18

2.3.1 线程标识符 18

2.3.2 线程名 20

2.3.3 线程状态 23

2.3.4 线程的优先级和调度 27

2.3.5 守护线程 30

2.4 线程管理 33

2.4.1 join()方法 33

2.4.2 sleep()方法 37

2.4.3 yield()方法 38

2.4.4 interrupt()方法 38

2.4.5 其他方法 40

2.5 线程分组 40

2.6 线程数目的确定 43

2.7 线程本地化 44

2.8 带返回值的线程 47

2.8.1 Callable接口 47

2.8.2 Future接口 47

2.8.3 Callable与Runnable的比较 50

2.9 案例分析 51

小结 61

习题 61

第3章 线程同步控制 62

3.1 为什么要使用同步控制 62

3.2 基本概念 64

3.2.1 数据竞争 64

3.2.2 临界区 65

3.2.3 监视器 65

3.2.4 阻塞和非阻塞 66

3.2.5 线程安全与线程不安全 66

3.3 锁 67

3.3.1 同步锁 67

3.3.2 可重入锁 70

3.3.3 读写锁 77

3.3.4 邮戳锁 83

3.3.5 几种锁机制的比较 89

3.3.6 锁的不足之处 90

3.3.7 减少锁竞争的方法 90

3.3.8 死锁和活锁 91

3.4 volatile变量 96

3.5 原子操作 96

3.5.1 基本类型的原子类 97

3.5.2 一般引用类型的原子类 100

3.5.3 ABA问题 102

3.5.4 扩展的原子引用类型 105

3.5.5 原子操作数组类 111

小结 116

习题 117

第4章 线程间通信 118

4.1 等待集合 118

4.2 wait()巭notify()巭notifyAll()方法 118

4.2.1 wait()方法 118

4.2.2 notify()方法 119

4.2.3 notifyAll()方法 119

4.2.4 实例 120

4.3 条件变量 126

4.3.1 await()方法 127

4.3.2 signal()方法 128

4.3.3 signalAll()方法 128

4.3.4 实例 128

习题 131

第5章 线程同步障栅 132

5.1 障栅 132

5.2 倒计时门闩 137

5.3 信号量 140

5.4 同步队列 145

5.5 交换器 148

5.6 阶段化处理 152

习题 160

第6章 线程执行器 161

6.1 线程池 161

6.1.1 Executor接口 161

6.1.2 ExecutorService接口 162

6.1.3 ThreadPoolExecutor类 162

6.1.4 工厂类Executors 163

6.1.5 使用线程执行器处理没有返回值的线程 164

6.2 固定数目的线程执行器 166

6.3 使用线程执行器处理有返回值的线程 168

6.4 延迟执行、周期性执行的执行器 171

6.4.1 ScheduledExecutorService接口 171

6.4.2 ScheduledFuture接口 172

6.4.3 举例 173

6.5 取消任务的执行 176

6.6 任务装载和结果处理的分离 177

6.7 管理被拒绝的任务 179

第7章 Fork巭Join框架 183

7.1 概述 183

7.2 相关知识 184

7.2.1 负载均衡 184

7.2.2 分治方法 184

7.2.3 工作窃取算法 185

7.3 Fork巭Join框架的编程模式 185

7.4 ForkJoinPool类 186

7.4.1 ForkJoinPool的创建 186

7.4.2 ForkJoinPool的使用 187

7.5 Fork巭Join框架中的任务 188

7.5.1 任务的创建 188

7.5.2 任务的运行方式 196

7.5.3 任务的取消 199

7.6 Fork巭Join框架的限制 202

7.7 几种线程机制的比较 202

习题 202

第8章 流处理 203

8.1 Lambda表达式 203

8.1.1 Lambda表达式的定义 203

8.1.2 Lambda表达式的使用 204

8.2 函数式接口Predicate 205

8.3 流 206

8.3.1 流简介 206

8.3.2 创建流 207

8.3.3 流的操作 208

第9章 自定义并发类 211

9.1 自定义线程工厂 211

9.2 自定义线程池 213

9.3 在执行器中使用自定义的线程工厂 215

9.4 自定义周期性任务 216

9.5 自定义与Fork巭Join框架相关的并发类 221

9.5.1 ForkJoinWorkerThread类 221

9.5.2 ForkJoinPool.ForkJoinWorkerThreadFactory接口 221

9.5.3 自定义Fork巭Join框架中的线程 222

9.5.4 自定义任务 224

9.6 自定义同步类 227

9.6.1 自定义锁 227

9.6.2 自定义原子操作 231

习题 233

第10章 线程安全的集合 234

10.1 线程安全的双端队列 234

10.2 线程安全的哈希表 238

10.3 线程安全的跳表 240

10.4 随机数产生 242

10.5 并行数组 244

第11章 多线程程序的性能和测试 246

11.1 性能 246

11.2 可伸缩性 248

11.3 多线程程序的测试 248

第12章 面向切面技术在并发编程中的应用 249

12.1 相关知识 249

12.1.1 面向切面编程 249

12.1.2 Java注释接口 251

12.2 类方法的并发执行 254

12.2.1 问题的提出 254

12.2.2 并行库 255

12.2.3 基于面向方面技术的并行库易用性优化 260

12.2.4 实验 262

12.2.5 小结 266

12.3 实现被标记的类方法的并发执行 267

12.4 使用面向切面技术分离并发关注点 269

12.4.1 问题演示 269

12.4.2 重构框架 271

12.4.3 实验评估 274

习题 277