第1章 走入并行世界 1
1.1 何去何从的并行计算 1
1.2 你必须知道的几个概念 6
1.3 并发级别 11
1.4 有关并行的两个重要定律 13
1.5 回到Java:JMM 17
1.6 参考文献 27
第2章 Java并行程序基础 29
2.1 有关线程你必须知道的事 29
2.2 初始线程:线程的基本操作 32
2.3 volatile与Java内存模型(JMM) 50
2.4 分门别类的管理:线程组 52
2.5 驻守后台:守护线程(Daemon) 54
2.6 先干重要的事:线程优先级 55
2.7 线程安全的概念与synchronized 57
2.8 程序中的幽灵:隐蔽的错误 61
2.9 参考文献 68
第3章 JDK并发包 70
3.1 多线程的团队协作:同步控制 70
3.2 线程复用:线程池 95
3.3 不要重复发明轮子:JDK的并发容器 121
3.4 参考资料 136
第4章 锁的优化及注意事项 138
4.1 有助于提高“锁”性能的几点建议 139
4.2 Java虚拟机对锁优化所做的努力 146
4.3 人手一支笔:ThreadLocal 147
4.4 无锁 157
4.5 有关死锁的问题 179
4.6 参考文献 183
第5章 并行模式与算法 184
5.1 探讨单例模式 184
5.2 不变模式 187
5.3 生产者-消费者模式 190
5.4 高性能的生产者-消费者:无锁的实现 194
5.5 Future模式 204
5.6 并行流水线 212
5.7 并行搜索 216
5.8 并行排序 218
5.9 并行算法:矩阵乘法 226
5.10 准备好了再通知我:网络NIO 230
5.11 读完了再通知我:AIO 245
5.12 参考文献 249
第6章 Java 8与并发 251
6.1 Java 8的函数式编程简介 251
6.2 函数式编程基础 255
6.3 一步一步走入函数式编程 263
6.4 并行流与并行排序 267
6.5 增强的Future:CompletableFuture 269
6.6 读写锁的改进:StampedLock 274
6.7 原子类的增强 281
6.8 参考文献 288
第7章 使用Akka构建高并发程序 289
7.1 新并发模型:Actor 290
7.2 Akka之Hello World 290
7.3 有关消息投递的一些说明 293
7.4 Actor的生命周期 295
7.5 监督策略 298
7.6 选择Actor 303
7.7 消息收件箱(Inbox) 303
7.8 消息路由 305
7.9 Actor的内置状态转换 308
7.10 询问模式:Actor中的Future 311
7.11 多个Actor同时修改数据:Agent 313
7.12 像数据库一样操作内存数据:软件事务内存 316
7.13 一个有趣的例子:并发粒子群的实现 319
7.14 参考文献 330
第8章 并行程序调试 331