圖解 Java 多線程設計模式
內容描述
本書通過具體的Java 程序,以淺顯易懂的語言逐一說明瞭多線程和並發處理中常用的12 種設計模式。內容涉及線程的基礎知識、線程的啟動與終止、線程間的互斥處理與協作、線程的有效應用、線程的數量管理以及性能優化的註意事項等。此外,還介紹了一些多線程編程時容易出現的失誤,以及多線程程序的閱讀技巧等。在講解過程中,不僅以圖配文,理論結合實例,而且提供了運用模式解決具體問題的練習題和答案,幫助讀者加深對多線程和並發處理的理解,並掌握其使用技巧。
目錄大綱
序章
1 Java線程1
1.1 Java線程2
1.2何謂線程2
明為跟踪處理流程,實為跟踪線程2
單線程程序3
多線程程序4
Thread類的run方法和start方法5
1.3線程的啟動9
線程的啟動(1)——利用Thread類的子類9
線程的啟動(2)——利用Runnable接口10
1.4線程的暫停12
1.5線程的互斥處理13
synchronized方法14
synchronized代碼塊17
1.6線程的協作18
等待隊列——線程休息室19
wait方法——將線程放入等待隊列19
notify方法——從等待隊列中取出線程21
notifyAll方法——從等待隊列中取出所有線程23
wait、notify、notifyAll是Object類的方法24
1.7線程的狀態遷移24
1.8線程相關的其他話題26
1.9本章所學知識26
1.10練習題26
序章2多線程程序的評價標準31
2.1多線程程序的評價標準32
安全性——不損壞對象32
生存性——必要的處理能夠被執行32
可複用性——類可重複利用33
性能——能快速、大批量地執行處理33
評價標準總結33
2.2本章所學知識34
2.3練習題34
第1章Single Threaded Execution模式——能通過這座橋的只有一個人35
1.1 Single Threaded Execution模式36
1.2示例程序1:不使用Single Threaded Execution模式的程序36
Main類37
非線程安全的Gate類37
UserThread類38
執行起來看看……出錯了39
為什麼會出錯呢40
1.3示例程序2:使用Single Threaded Execution模式的程序41
線程安全的Gate類41
synchronized的作用42
1.4 Single Threaded Execution模式中的登場角色43
1.5拓展思路的要點44
何時使用(可使用Single Threaded Execution模式的情況) 44
生存性與死鎖45
可複用性和繼承反常46
臨界區的大小和性能46
1.6相關的設計模式47
Guarded Suspension模式47
Read—Write Lock模式47
Immutable模式47
Thread—Specific Storage模式48
1.7延伸閱讀1:關於synchronized 48
synchronized語法與Before/After模式48
synchronized在保護著什麼49
該以什麼單位來保護呢50
使用哪個鎖保護50
原子操作51
long與double的操作不是原子的51
1.8延伸閱讀2:java.util.concurrent包和計數信號量52
計數信號量和Semaphore類52
使用Semaphore類的示例程序52
1.9本章所學知識55
1.10練習題55
第2章Immutable模式——想破壞也破壞不了61
2.1 Immutable模式62
2.2示例程序62
使用Immutable模式的Person類62
Main類63
PrintPersonThread類63
2.3 Immutable模式中的登場角色65
2.4拓展思路的要點66
何時使用(可使用Immutable模式的情況) 66
考慮成對的mutable類和immutable類(性能) 66
為了確保不可變性(可複用性) 67
標準類庫中用到的Immutable模式67
2.5相關的設計模式69
Single Threaded Execution模式69
Read—Write Lock模式69
Flyweight模式69
2.6延伸閱讀1:final 69
final的含義69
2.7延伸閱讀2:集合類與多線程71
示例1:非線程安全的java.util.ArrayList類71
示例2:利用Collections.synchronizedList方法所進行的同步74
示例3:使用copy—on—write的java.util.concurrent.CopyOnWriteArrayList類75
2.8本章所學知識76
2.9練習題77
第3章Guarded Suspension模式——等我準備好哦81
3.1 Guarded Suspension模式82
3.2示例程序82
Request類83
RequestQueue類84
ClientThread類85
ServerThread類85
Main類86
java.util. Queue與java.util.LinkedList的操作87
getRequest詳解87
putRequest詳解89
synchronized的含義89
wait與鎖89
3.3 Guarded Suspension模式中的登場角色90
3.4拓展思路的要點91
附加條件的synchronized 91
多線程版本的if 91
忘記改變狀態與生存性91
wait與notify/notifyAll的責任(可復用性) 91
各種稱呼91
使用java.util.concurrent.LinkedBlockingQueue的示例程序93
3.5相關的設計模式94
Single Threaded Execution模式94
Balking模式94
Producer—Consumer模式94
Future模式94
3.6本章所學知識95
3.7練習題95
第4章Balking模式——不需要就算了99
4.1 Balking模式100
4.2示例程序100
Data類100
SaverThread類102
ChangerThread類102
Main類103
4.3 Balking模式中的登場角色105
4.4拓展思路的要點106
何時使用(可使用Balking模式的情況) 106
balk結果的表示方式107
4.5相關的設計模式107
Guarded Suspension模式107
Observer模式107
4.6延伸閱讀:超時108
Balking模式和Guarded Suspension模式之間108
wait何時終止呢108
guarded timed的實現(使用wait) 109
synchronized中沒有超時,也不能中斷110
java.util.concurrent中的超時111
4.7本章所學知識111
4.8練習題112
第5章Producer—Consumer模式——我來做,你來用115
5.1 Producer—Consumer模式116
5.2示例程序116
Main類116
MakerThread類117
EaterThread類118
Table類118
解讀put方法120
解讀take方法121
5.3 Producer—Consumer模式中的登場角色122
5.4拓展思路的要點123
守護安全性的Channel角色(可複用性) 123
不可以直接傳遞嗎124
Channel角色的剩餘空間所導致的問題124
以什麼順序傳遞Data角色呢125
“存在中間角色”的意義125
Consumer角色只有一個時會怎麼樣呢126
5.5相關的設計模式126
Mediator模式126
Worker Thread模式126
Command模式126
Strategy模式127
5.6延伸閱讀1:理解InterruptedException異常127
可能會花費時間,但可以取消127
加了throwsInterruptedException的方法127
sleep方法和interrupt方法128
wait方法和interrupt方法128
join方法和interrupt方法129
interrupt方法只是改變中斷狀態129
isInterrupted方法——檢查中斷狀態130
Thread.interrupted方法——檢查並清除中斷狀態130
不可以使用Thread類的stop方法130
5.7延伸閱讀2:java.util.concurrent包和Producer—Consumer模式131
java.util.concurrent包中的隊列131
使用java.util.concurrent.ArrayBlockingQueue的示例程序132
使用java.util.concurrent.Exchanger類交換緩衝區133
5.8本章所學知識136
5.9練習題137
第6章Read—Write Lock模式——大家一起讀沒問題,但讀的時候不要寫哦141
第7章Thread—Per—Message模式——這項工作就交給你了163
第8章Worker Thread模式——工作沒來就一直等,工作來了就乾活187
第9章Future模式——先給您提貨單211
第10章Two—Phase Termination模式— —先收拾房間再睡覺231
第11章Thread—Specific Storage模式——一個線程一個儲物櫃263
第12章Active Object模式——接收異步消息的主動對象283
第13章總結——多線程編程的模式語言321
附錄
作者介紹
結城浩(作者)
生於1963年,日本資-深技術作家和程序員。在編程語言、設計模式、數學、加密技術等領域,編寫了很多深受歡迎的入門書。代表作有《數學女孩》系列、《程序員的數學》、《圖解密碼技術》等。
侯振龍(譯者)
管理科學與工程專業碩士,日語一級,軟件開發工程師,具有十年對日軟件開發經驗,現就職於某日本獨資企業。
楊文軒(譯者)
華中科技大學碩士,擅長Web 2.0開發,有豐富的對日開發經驗。現就職於日本方正股份有限公司。譯作有《圖解基礎設施設計模式》《C現代編程:集成開發環境、設計模式、極限編程、測試驅動開發、重構、持續集成》及《圖解設計模式》。