第1章 第一步:並發設計原理  1
         1.1 基本的並發概念  1
         1.1.1 並發與並行  1
         1.1.2 同步  2
         1.1.3 不可變對象  2
         1.1.4 原子操作和原子變量  3
         1.1.5 共享內存與消息傳遞  3
         1.2 並發應用程序中可能齣現的問題  3
         1.2.1 數據競爭  3
         1.2.2 死鎖  4
         1.2.3 活鎖  4
         1.2.4 資源不足  4
         1.2.5 優先權反轉  5
         1.3 設計並發算法的方法論  5
         1.3.1 起點:算法的一個串行版本  5
         1.3.2 第1步:分析  5
         1.3.3 第2步:設計  5
         1.3.4 第3步:實現  6
         1.3.5 第4步:測試  6
         1.3.6 第5步:調整  6
         1.3.7 結論  7
         1.4 Java 並發API  8
         1.4.1 基本並發類  8
         1.4.2 同步機製  8
         1.4.3 執行器  9
         1.4.4 Fork/Join 框架  9
         1.4.5 並行流  9
         1.4.6 並發數據結構  9
         1.5 並發設計模式  10
         1.5.1 信號模式  10
         1.5.2 會閤模式  11
         1.5.3 互斥模式  11
         1.5.4 多元復用模式  12
         1.5.5 柵欄模式  12
         1.5.6 雙重檢查鎖定模式  12
         1.5.7 讀?寫鎖模式  13
         1.5.8 綫程池模式  14
         1.5.9 綫程局部存儲模式  14
         1.6 設計並發算法的提示和技巧  14
         1.6.1 正確識彆獨立任務  14
         1.6.2 在盡可能高的層麵上實施並發處理  15
         1.6.3 考慮伸縮性  15
         1.6.4 使用綫程安全API  15
         1.6.5 絕不要假定執行順序  16
         1.6.6 在靜態和共享場閤盡可能使用局部綫程變量  16
         1.6.7 尋找更易於並行處理的算法版本  17
         1.6.8 盡可能使用不可變對象  17
         1.6.9 通過對鎖排序來避免死鎖  17
         1.6.10 使用原子變量代替同步  18
         1.6.11 占有鎖的時間盡可能短  19
         1.6.12 謹慎使用延遲初始化  19
         1.6.13 避免在臨界段中使用阻塞操作  19
         1.7 小結  20
         第2章 使用基本元素:Thread 和Runnable  21
         2.1 Java 中的綫程  21
         2.1.1 Java 中的綫程:特徵和狀態  22
         2.1.2 Thread 類和Runnable 接口  23
         2.2 第一個例子:矩陣乘法  24
         2.2.1 公共類  24
         2.2.2 串行版本  25
         2.2.3 並行版本  25
         2.3 第二個例子:文件搜索  32
         2.3.1 公共類  32
         2.3.2 串行版本  32
         2.3.3 並發版本  33
         2.3.4 對比解決方案  37
         2.4 小結  38
         第3章 管理大量綫程:執行器  39
         3.1 執行器簡介  39
         3.1.1 執行器的基本特徵  39
         3.1.2 執行器框架的基本組件  40
         3.2 第一個例子:k-最近鄰算法  40
         3.2.1 k-最近鄰算法:串行版本  41
         3.2.2 k-最近鄰算法:細粒度並發版本  42
         3.2.3 k-最近鄰算法:粗粒度並發版本  45
         3.2.4 對比解決方案  46
         3.3 第二個例子:客戶端/服務器環境下的並發處理  48
         3.3.1 客戶端/服務器:串行版  48
         3.3.2 客戶端/服務器:並行版本  51
         3.3.3 額外的並發服務器組件  54
         3.3.4 對比兩種解決方案  59
         3.3.5 其他重要方法  61
         3.4 小結  62
         第4章 充分利用執行器  63
         4.1 執行器的高級特性  63
         4.1.1 任務的撤銷  63
         4.1.2 任務執行調度  64
         4.1.3 重載執行器方法  64
         4.1.4 更改一些初始化參數  64
         4.2 第一個例子:高級服務器應用程序  65
         4.2.1 ServerExecutor 類  65
         4.2.2 命令類  70
         4.2.3 服務器部件  72
         4.2.4 客戶端部件  78
         4.3 第二個例子:執行周期性任務  79
         4.3.1 公共部件  79
         4.3.2 基礎閱讀器  81
         4.3.3 高級閱讀器  84
         4.4 有關執行器的其他信息  87
         4.5 小結  87
         第5章 從任務獲取數據:Callable接口與Future 接口  88
         5.1 Callable 接口和Future 接口簡介  88
         5.1.1 Callable 接口  88
         5.1.2 Future 接口  89
         5.2 第一個例子:單詞最佳匹配算法  89
         5.2.1 公共類  90
         5.2.2 最佳匹配算法:串行版本  91
         5.2.3 最佳匹配算法:第一個並發版本  92
         5.2.4 最佳匹配算法:第二個並發版本  95
         5.2.5 單詞存在算法:串行版本  96
         5.2.6 單詞存在算法:並行版本  98
         5.2.7 對比解決方案  100
         5.3 第二個例子:為文檔集創建倒排索引  102
         5.3.1 公共類  103
         5.3.2 串行版本  104
         5.3.3 第一個並發版本:每個文檔一個任務  105
         5.3.4 第二個並發版本:每個任務多個文檔  109
         5.3.5 對比解決方案  112
         5.3.6 其他相關方法  113
         5.4 小結  113
         第6章 運行分為多階段的任務:Phaser 類  115
         6.1 Phaser 類簡介  115
         6.1.1 參與者的注冊與注銷  116
         6.1.2 同步階段變更  116
         6.1.3 其他功能  116
         6.2 第一個例子:關鍵字抽取算法  117
         6.2.1 公共類  118
         6.2.2 串行版本  121
         6.2.3 並發版本  123
         6.2.4 對比兩種解決方案  128
         6.3 第二個例子:遺傳算法  129
         6.3.1 公共類  130
         6.3.2 串行版本  132
         6.3.3 並發版本  134
         6.3.4 對比兩種解決方案  139
         6.4 小結  141
         第7章 優化分治解決方案: Fork/Join 框架  142
         7.1 Fork/Join 框架簡介  142
         7.1.1 Fork/Join 框架的基本特徵  143
         7.1.2 Fork/Join 框架的局限性  143
         7.1.3 Fork/Join 框架的組件  144
         7.2 第一個例子:k-means 聚類算法  144
         7.2.1 公共類  145
         7.2.2 串行版本  149
         7.2.3 並發版本  151
         7.2.4 對比解決方案  155
         7.3 第二個例子:數據篩選算法  157
         7.3.1 公共特性  157
         7.3.2 串行版  157
         7.3.3 並發版本  159
         7.3.4 對比兩個版本  165
         7.4 第三個例子:歸並排序算法  166
         7.4.1 共享類  166
         7.4.2 串行版本  167
         7.4.3 並發版本  169
         7.4.4 對比兩個版本  172
         7.5 Fork/Join 框架的其他方法  172
         7.6 小結  173
         第8章 使用並行流處理大規模數據集:MapReduce 模型  174
         8.1 流的簡介  174
         8.1.1 流的基本特徵  174
         8.1.2 流的組成部分  175
         8.1.3 MapReduce 與MapCollect  177
         8.2 第一個例子:數值綜閤分析應用程序  178
         8.2.1 並發版本  178
         8.2.2 串行版本  185
         8.2.3 對比兩個版本  186
         8.3 第二個例子:信息檢索工具  186
         8.3.1 約簡操作簡介  187
         8.3.2 第一種方式:全文檔查詢  188
         8.3.3 第二種方式:約簡的文檔查詢  191
         8.3.4 第三種方式:生成一個含有結果的HTML 文件  191
         8.3.5 第四種方式:預先載入倒排索引  194
         8.3.6 第五種方式:使用我們的執行器  195
         8.3.7 從倒排索引獲取數據:ConcurrentData 類  196
         8.3.8 獲取文件中的單詞數  196
         8.3.9 獲取文件的平均tfxidf 值  196
         8.3.10 獲取索引中的最大tfxidf值和最小tfxidf 值  197
         8.3.11 ConcurrentMain 類  198
         8.3.12 串行版  199
         8.3.13 對比兩種解決方案  199
         8.4 小結  202
         第9章 使用並行流處理大規模數據集:MapCollect 模型  203
         9.1 使用流收集數據  203
         9.2 第一個例子:無索引條件下的數據搜索  205
         9.2.1 基本類  205
         9.2.2 第一種方式:基本搜索  207
         9.2.3 第二種方式:高級搜索  209
         9.2.4 本例的串行實現  211
         9.2.5 對比實現方案  211
         9.3 第二個例子:推薦係統  212
         9.3.1 公共類  212
         9.3.2 推薦係統:主類  213
         9.3.3 ConcurrentLoaderAccumulator 類  215
         9.3.4 串行版  216
         9.3.5 對比兩個版本  216
         9.4 第三個例子:社交網絡中的共同聯係人  217
         9.4.1 基本類  218
         9.4.2 並發版本  219
         9.4.3 串行版本  223
         9.4.4 對比兩個版本  223
         9.5 小結  224
         第10章 異步流處理:反應流  225
         10.1 Java 反應流簡介  225
         10.1.1 Flow.Publisher 接口  226
         10.1.2 Flow.Subscriber 接口  226
         10.1.3 Flow.Subscription 接口  226
         10.1.4 SubmissionPublisher 類  226
         10.2 第一個例子:麵嚮事件通知的集中式係統   227
         10.2.1 Event 類  227
         10.2.2 Producer 類   227
         10.2.3 Consumer 類   228
         10.2.4 Main 類  230
         10.3 第二個例子:新聞係統  231
         10.3.1 News 類  232
         10.3.2 發布者相關的類  232
         10.3.3 Consumer 類   235
         10.3.4 Main 類  236
         10.4 小結  238
         第11章 探究並發數據結構和同步工具  240
         11.1 並發數據結構  240
         11.1.1 阻塞型數據結構和非阻塞型數據結構  241
         11.1.2 並發數據結構  241
         11.1.3 使用新特性  244
         11.1.4 原子變量  251
         11.1.5 變量句柄  252
         11.2 同步機製  254
         11.2.1 CommonTask 類  255
         11.2.2 Lock 接口  255
         11.2.3 Semaphore 類  256
         11.2.4 CountDownLatch 類  258
         11.2.5 CyclicBarrier 類  259
         11.2.6 CompletableFuture 類  261
         11.3 小結  268
         第12章 測試與監視並發應用程序  269
         12.1 監視並發對象  269
         12.1.1 監視綫程  269
         12.1.2 監視鎖  270
         12.1.3 監視執行器  272
         12.1.4 監視Fork/Join 框架  273
         12.1.5 監視Phaser  274
         12.1.6 監視流API  275
         12.2 監視並發應用程序  276
         12.2.1 Overview 選項卡  278
         12.2.2 Memory 選項卡  279
         12.2.3 Threads 選項卡  280
         12.2.4 Classes 選項卡  280
         12.2.5 VM Summary 選項卡  281
         12.2.6 MBeans 選項卡  283
         12.2.7 About 選項卡  284
         12.3 測試並發應用程序  284
         12.3.1 使用MultithreadedTC 測試並發應用程序  285
         12.3.2 使用Java Pathfinder 測試並發應用程序  288
         12.4 小結  293
         第13章 JVM 中的並發處理:Clojure、帶有GPars 庫的Groovy 以及Scala  294
         13.1 Clojure 的並發處理  294
         13.1.1 使用Java 元素  295
         13.1.2 引用類型  295
         13.1.3 Ref 對象  298
         13.1.4 Delay  299
         13.1.5 Future  300
         13.1.6 Promise  301
         13.2 Groovy 及其GPars 庫的並發處理  302
         13.3 軟件事務性內存  302
         13.3.1 使用Java 元素  302
         13.3.2 數據並行處理  303
         13.3.3 Fork/Join 處理  307
         13.3.4 Actor  308
         13.3.5 Agent  315
         13.3.6 Dataf low  316
         13.4 Scala 的並發處理  322
         13.4.1 Scala 中的Future 對象  322
         13.4.2 Promise  328
         13.5 小結  329
      · · · · · ·     (
收起)