精通Java并發編程 第2版( 簡體 字) | |
作者:[西]哈維爾·費爾南德斯·岡薩雷斯 | 類別:1. -> 程式設計 -> JAVA -> Java |
出版社:人民郵電出版社 | 3dWoo書號: 49985 詢問書籍請說出此書號! 有庫存 NT售價: 445 元 |
出版日:10/1/2018 | |
頁數:329 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787115491664 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第 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 Java 提供了一套非常強大的并發API,可以輕松實現任何類型的并發應用程序。本書講述Java 并發API 最重要的元素,包括執行器框架、Phaser 類、Fork/Join 框架、流API、并發數據結構、同步機制,并展示如何在實際開發中使用它們。此外,本書還介紹了設計并發應用程序的方法論、設計模式、實現良好并發應用程序的提示和技巧、測試并發應用程序的工具和方法,以及如何使用面向Java 虛擬機的其他編程語言實現并發應用程序。
|