內容簡介
本書在Java程式語言的基礎上,對並發編程的相關概念、基本原理、方法和技術進行了詳細講解,內容涉及執行緒同步和障柵、執行緒間通信、執行器、
Fork/Join框架和並行流處理等內容。本書在講解並發編程基本知識的同時,大量使用實例進行演示,力求做到內容透徹。本書內容先進翔實、知識結構合理、例題豐富、深入淺出,既適合作為普通高校和工程類院校學生學習高性能程式設計的教材,又適合作為IT領域人員學習Java並發編程技術的工具書,同時也可以作為那些需要掌握高性能計算技術的人員的自學參考用書。
圖書目錄
第1章緒論1
1.1概述1
1.2概念和術語2
1.2.1並發與並行2
1.2.2串列執行和順序執行4
1.2.4加速比5
1.3Java並發方面的特性5
1.4並發/並行程式設計的方法6
1.4.1分治方法6
1.4.2流水線7
1.4.3訊息傳遞8
1.5並發程式的評判標準8
1.6Java記憶體模型9
1.7程式的運行說明10第2章執行緒13
2.1進程與執行緒13
2.2執行緒的創建14
2.2.1繼承Thread類14
2.2.2實現Runnable接口16
2.2.3兩種方法的比較18
2.2.4相關說明18
2.3執行緒的屬性18
2.3.1執行緒標識符18
2.3.2執行緒名20
2.3.3執行緒狀態23
2.3.4執行緒的優先權和調度27
2.3.5守護執行緒30
2.4執行緒管理33
2.4.1join()方法33
2.4.2sleep()方法37
2.4.3yield()方法38
2.4.4interrupt()方法38
2.4.5其他方法40
2.5執行緒分組40
2.6執行緒數目的確定43
2.7執行緒本地化44
2.8帶返回值的執行緒47
2.8.1Callable接口47
2.8.2Future接口47
2.8.3Callable與Runnable的比較50
2.9案例分析51
小結61
習題61第3章執行緒同步控制62
3.1為什麼要使用同步控制62
3.2基本概念64
3.2.1數據競爭64
3.2.2臨界區65
3.2.3監視器65
3.2.4阻塞和非阻塞66
3.2.5執行緒安全與執行緒不安全66
3.3鎖67
3.3.1同步鎖67
3.3.2可重入鎖70
3.3.3讀寫鎖77
3.3.4郵戳鎖83
3.3.5幾種鎖機制的比較89
3.3.6鎖的不足之處90
3.3.7減少鎖競爭的方法90
3.3.8死鎖和活鎖91
3.4volatile變數96
3.5原子操作96
3.5.1基本類型的原子類97
3.5.2一般引用類型的原子類100
3.5.3ABA問題102
3.5.4擴展的原子引用類型105
3.5.5原子運算元組類111
小結116
習題117第4章執行緒間通信118
4.1等待集合118
4.2wait()/notify()/notifyAll()方法118
4.2.1wait()方法118
4.2.2notify()方法119
4.2.3notifyAll()方法119
4.2.4實例120
4.3條件變數126
4.3.1await()方法127
4.3.2signal()方法128
4.3.3signalAll()方法128
4.3.4實例128
習題131第5章執行緒同步障柵132
5.1障柵132
5.2倒計時門閂137
5.3信號量140
5.4同步佇列145
5.5交換器148
5.6階段化處理152
習題160第6章執行緒執行器161
6.1執行緒池161
6.1.1Executor接口161
6.1.2ExecutorService接口162
6.1.3ThreadPoolExecutor類162
6.1.4工廠類Executors163
6.1.5使用執行緒執行器處理沒有返回值的執行緒164
6.2固定數目的執行緒執行器166
6.3使用執行緒執行器處理有返回值的執行緒168
6.4延遲執行、周期性執行的執行器171
6.4.1ScheduledExecutorService接口171
6.4.2ScheduledFuture接口172
6.4.3舉例173
6.5取消任務的執行176
6.6任務裝載和結果處理的分離177
6.7管理被拒絕的任務179第7章Fork/Join框架183
7.1概述183
7.2相關知識184
7.2.1負載均衡184
7.2.2分治方法184
7.2.3工作竊取算法185
7.3Fork/Join框架的編程模式185
7.4ForkJoinPool類186
7.4.1ForkJoinPool的創建186
7.4.2ForkJoinPool的使用187
7.5Fork/Join框架中的任務188
7.5.1任務的創建188
7.5.2任務的運行方式196
7.5.3任務的取消199
7.6Fork/Join框架的限制202
7.7幾種執行緒機制的比較202
習題202第8章流處理203
8.1Lambda表達式203
8.1.1Lambda表達式的定義203
8.1.2Lambda表達式的使用204
8.2函式式接口Predicate205
8.3流206
8.3.1流簡介206
8.3.2創建流207
8.3.3流的操作208第9章自定義並發類211
9.1自定義執行緒工廠211
9.2自定義執行緒池213
9.3在執行器中使用自定義的執行緒工廠215
9.4自定義周期性任務216
9.5自定義與Fork/Join框架相關的並發類221
9.5.1ForkJoinWorkerThread類221
9.5.2ForkJoinPool.ForkJoinWorkerThreadFactory接口221
9.5.3自定義Fork/Join框架中的執行緒222
9.5.4自定義任務224
9.6自定義同步類227
9.6.1自定義鎖227
9.6.2自定義原子操作231
習題233第10章執行緒安全的集合234
10.1執行緒安全的雙端佇列234
10.2執行緒安全的哈希表238
10.3執行緒安全的跳表240
10.4隨機數產生242
10.5並行數組244第11章多執行緒程式的性能和測試246
11.1性能246
11.2可伸縮性248
11.3多執行緒程式的測試248第12章面向切面技術在並發編程中的套用249
12.1相關知識249
12.1.1面向切面編程249
12.1.2Java注釋接口251
12.2類方法的並發執行254
12.2.1問題的提出254
12.2.2並行庫255
12.2.3基於面向方面技術的並行庫易用性最佳化260
12.2.4實驗262
12.2.5小結266
12.3實現被標記的類方法的並發執行267
12.4使用面向切面技術分離並發關注點269
12.4.1問題演示269
12.4.2重構框架271
12.4.3實驗評估 274
習題277