Java 多線程編程實戰指南 (設計模式篇), 2/e

黃文海

  • 出版商: 電子工業
  • 出版日期: 2020-03-01
  • 定價: $414
  • 售價: 8.5$352
  • 語言: 簡體中文
  • 頁數: 280
  • 裝訂: 平裝
  • ISBN: 7121382458
  • ISBN-13: 9787121382451
  • 相關分類: Design Pattern
  • 已絕版

買這商品的人也買了...

相關主題

商品描述

隨著CPU多核時代的到來,多線程編程在充分利用計算資源、提高軟件服務質量方面扮演了越來越重要的角色。
解決多線程編程中頻繁出現的普遍問題可以藉鑑設計模式所提供的現成解決方案。
然而,多線程編程相關的設計模式圖書多采用C++作為描述語言,
且書中所舉的例子多與應用開發人員的實際工作相去甚遠。
《Java多線程編程實戰指南:設計模式篇(第2版)》採用Java語言和UML為描述語言,
並結合作者多年工作經歷及相關實踐經驗,介紹了多線程環境下常用設計模式的來龍去脈:
各個設計模式是什麼樣的、典型的實際應用場景、
實際應用時需要注意的事項及各個設計模式的可複用代碼實現代碼。

《Java多線程編程實戰指南:設計模式篇(第2版)》第2版除更正了第1版中的錯誤外,
還新增了JDK 8、JDK 9中與多線程設計模式相關的內容,並對代碼進行了重構和重新排版,
使代碼部分重點更突出、更易於閱讀,以及提高了插圖的清晰度。
《Java多線程編程實戰指南:設計模式篇(第2版)》適合有一定Java多線程編程基礎、經驗的讀者閱讀。

作者簡介

黃文海

2004年開始從事軟件開發工作,近幾年從事軟件項目管理工作。
在其工作過程中積累了豐富的技術指導經驗和企業內部培訓經驗。
曾在InfoQ中文站和IBM developerWorks上發表過十幾篇技術、項目管理文章。
 

目錄大綱

第1章Java多線程編程實戰基礎1
1.1無處不在的線程1
1.2線程的創建與運行3
1.3線程的狀態與上下文切換5
1.4對線程的監視8
1.5原子性、內存可見性和重排序――重新認識synchronized和volatile 11
1.6多線程編程的優勢和風險13
1.7多線程編程常用術語14

第2章設計模式簡介19
2.1設計模式及其作用19
2.2多線程設計模式簡介22
2.3設計模式的描述23

第3章Immutable Object(不可變對象)模式25
3.1 Immutable Object模式簡介25
3.2 Immutable Object模式的架構27
3. 3 Immutable Object模式實戰案例解析29
3.4 Immutable Object模式的評價與實現考量33
3.4.1適用場景33
3.4.2對垃圾回收(Garbage Collection)的影響34
3.4.3使用等效或者近似的不可變對象35
3.4.4防禦性複制35
3.5 Immutable Object模式的可複用實現代碼35
3.6 Java標準庫實例35
3.7相關模式37
3.7.1 Thread Specific Storage模式(第10章) 37
3.7.2 Serial Thread Confinement模式(第11章) 37
3.8參考資源38

第4章Guarded Suspension(保護性暫掛)模式39
4.1 Guarded Suspension模式簡介39
4.2 Guarded Suspension模式的架構39
4.3 Guarded Suspension模式實戰案例解析43
4.4 Guarded Suspension模式的評價與實現考量50
4.4.1內存可見性和鎖洩漏(Lock Leak) 51
4.4.2線程被過早地喚醒52
4.4.3嵌套監視器鎖死53
4.5 Guarded Suspension模式的可複用實現代碼56
4.6 Java標準庫實例56
4.7相關模式56
4.7.1 Promise模式(第6章) 57
4.7.2 Producer-Consumer模式(第7章) 57
4.8參考資源57

第5章Two- phase Termination(兩階段終止)模式58
5.1 Two-phase Termination模式簡介58
5.2 Two-phase Termination模式的架構59
5.3 Two-phase Termination模式實戰案例解析61
5.4 Two-phase Termination模式的評價與實現考量70
5.4.1線程停止標誌71
5.4.2生產者/消費者問題中的線程停止71
5.4.3隱藏而非暴露可停止線程73
5.5 Two-phase Termination模式的可複用實現代碼73
5.6 Java標準庫實例73
5.7相關模式74
5.7.1 Producer- Consumer模式(第7章) 74
5.7.2 Master-Slave模式(第12章) 74
5.8參考資源74

第6章Promise(承諾)模式75
6.1 Promise模式簡介75
6.2 Promise模式的架構75
6.3 Promise模式實戰案例解析78
6.4 Promise模式的評價與實現考量81
6.4.1異步方法的異常處理82
6.4.2輪詢82
6.4.3異步任務的執行83
6.5 Promise模式的可複用實現代碼84
6.6 Java標準庫實例85
6.7相關模式85
6.7.1 Guarded Suspension模式(第4章) 85
6.7.2 Active Object模式(第8章) 86
6.7.3 Master-Slave模式(第12章) 86
6.7.4 Factory Method(工廠方法)模式86
6.8參考資源86

第7章Producer-Consumer(生產者/消費者)模式87
7.1 Producer-Consumer模式簡介87
7.2 Producer-Consumer模式的架構87
7.3 Producer-Consumer模式實戰案例解析90
7.4 Producer-Consumer模式的評價與實現考量93
7.4.1產品的粒度94
7.4.2通道積壓94
7.4.3非阻塞式反壓與Reactive Streams規範96
7.4.4工作竊取算法97
7.4 .5線程的停止101
7.4.6高性能、高可靠性的Producer-Consumer模式實現101
7.5 Producer-Consumer模式的可複用實現代碼102
7.6 Java標準庫實例102
7.7相關模式102
7.7.1 Guarded Suspension模式(第4章) 102
7.7.2 Thread Pool模式(第9章) 103
7.8參考資源103

第8章Active Object(主動對象)模式104
8.1 Active Object模式簡介104
8.2 Active Object模式的架構105
8.3 Active Object模式實戰案例解析108
8.4 Active Object模式的評價與實現考量115
8.4.1錯誤隔離117
8.4.2緩衝區監控118
8.4.3緩衝區飽和處理策略118
8.4.4 Scheduler空閒工作者線程清理119
8.5 Active Object模式的可複用實現代碼119
8.6 Java標準庫實例123
8.7相關模式123
8.7.1 Promise模式(第6章) 123
8.7.2 Producer-Consumer模式(第7章) 123
8.8參考資源124

第9章Thread Pool(線程池)模式125
9.1 Thread Pool模式簡介125
9.2 Thread Pool模式的架構126
9.3 Thread Pool模式實戰案例解析128
9.4 Thread Pool模式的評價與實現考量130
9.4.1工作隊列的選擇131
9.4.2線程池大小調校132
9.4.3線程池監控134
9.4.4線程洩漏135
9.4.5可靠性與線程池飽和處理策略135
9.4.6死鎖138
9.4.7線程池空閒線程清理139
9.5 Thread Pool模式的可複用實現代碼140
9.6 Java標準庫實例140
9.7相關模式140
9.7.1 Two-phase Termination模式(第5章) 140
9.7.2 Promise模式(第6章) 141
9.7 .3 Producer-Consumer模式(第7章) 141
9.8參考資源141

第10章Thread Specific Storage(線程特有存儲)模式142
10.1 Thread Specific Storage模式簡介142
10.2 Thread Specific Storage模式的架構144
10.3 Thread Specific Storage模式實戰案例解析146
10.4 Thread Specific Storage模式的評價與實現考量149
10.4.1在線程池環境下使用Thread Specific Storage模式153
10.4.2內存洩漏與偽內存洩漏153
10.5 Thread Specific Storage模式的可複用實現代碼161
10.6 Java標準庫實例161
10.7相關模式162
10.7.1 Immutable Object模式(第3章) 162
10.7.2 Proxy(代理)模式162
10.7.3 Singleton(單例)模式162
10.8參考資源162

第11章Serial Thread Confinement(串行線程封閉)模式163
11.1 Serial Thread Confinement模式簡介163
11.2 Serial Thread Confinement模式的架構163
11.3 Serial Thread Confinement模式實戰案例解析166
11.4 Serial Thread Confinement模式的評價與實現考量170
11.5 Serial Thread Confinement模式的可複用實現代碼171
11.6 Java標準庫實例176
11.7相關模式177
11.7.1 Immutable Object模式(第3章) 177
11. 7.2 Promise模式(第6章) 177
11.7.3 Producer-Consumer模式(第7章) 177
11.7.4 Thread Specific Storage模式(第10章) 177
11.8參考資源177

第12章Master-Slave(主僕)模式178
12.1 Master-Slave模式簡介178
12.2 Master-Slave模式的架構178
12.3 Master-Slave模式實戰案例解析180
12.4 Master-Slave模式的評價與實現考量187
12.4.1子任務處理結果的收集188
12.4.2 Slave參與者實例的負載均衡與工作竊取189
12.4.3可靠性與異常處理190
12.4.4 Slave線程的停止190
12.5 Master-Slave模式的可複用實現代碼190
12.6 Java標準庫實例204
12.7相關模式204
12.7.1 Two-phase Termination模式(第5章) 204
12.7.2 Promise模式(第6章) 204
12 .7.3 Strategy(策略)模式204
12.7.4 Template(模板)模式205
12.7.5 Factory Method(工廠方法)模式205
12.8參考資源205

第13章Pipeline(流水線)模式206
13 .1 Pipeline模式簡介206
13.2 Pipeline模式的架構207
13.3 Pipeline模式實戰案例解析212
13.4 Pipeline模式的評價與實現考量219
13.4.1 Pipeline的深度220
13.4.2基於線程池的Pipe 220
13.4.3錯誤處理223
13.4.4可配置的Pipeline 224
13.5 Pipeline模式的可複用實現代碼224
13.6 Java標準庫實例236
13.7相關模式236
13.7.1 Serial Thread Confinement模式(第11章) 236
13.7.2 Master-Slave模式(第12章) 237
13.7.3 Composite模式237
13.8參考資源237

第14章Half-sync/Half-async(半同步/半異步)模式238
14.1 Half-sync/Half-async模式簡介238
14.2 Half-sync/Half-async模式的架構238
14.3 Half-sync/Half-async模式實戰案例解析240
14.4 Half-sync/Half-async模式的評價與實現考量249
14.4.1隊列積壓250
14.4.2避免同步任務層處理過慢251
14.5 Half-sync/Half-async模式的可複用實現代碼251
14.6 Java標準庫實例256
14.7相關模式256
14.7.1 Two-phase Termination模式(第5章) 256
14.7.2 Producer-Consumer模式(第7章) 256
14.7.3 Active Object模式(第8章) 256
14.7.4 Thread Pool模式(第9章) 257
14.8參考資源257

第15章模式語言258
15.1設計模式之間的聯繫258
15.2 Immutable Object模式260
15.3 Guarded Suspension模式261
15.4 Two- phase Termination模式262
15.5 Promise模式263
15.6 Producer-Consumer模式264
15.7 Active Object模式265
15.8 Thread Pool模式266
15.9 Thread Specific Storage模式267
15.10 Serial Thread Confinement模式268
15. 11 Master-Slave模式269
15.12 Pipeline模式270
15.13 Half-sync/Half-async模式271
附錄A本書常用UML圖指南272
參考文獻281