圖解 Java 並發編程
汪建
買這商品的人也買了...
-
$550$495 -
$320$250 -
$480$374 -
$551管理海量數據-壓縮索引和查詢(第2版經典再現全新修訂版) (Managing Gigabytes: Compressing and Indexing Documents and Images, 2/e)
-
$390$304 -
$650$507 -
$330$314 -
$534$507 -
$400$316 -
$560$437 -
$500$390 -
$305Python Web 項目開發實戰教程 (Flask版)(微課版)
-
$479$455 -
$396$376 -
$774$735 -
$520$411 -
$602深入理解 Linux 網絡: 修煉底層內功,掌握高性能原理
-
$500$390 -
$580$458 -
$534$507 -
$654$621 -
$580$458 -
$880$695 -
$800$632 -
$850$672
相關主題
商品描述
《圖解Java並發編程》採用圖文並茂外加大量案例代碼的方式講解了Java並發編程機制的運行原理。
《圖解Java並發編程》分為12章,內容涵蓋了線程機制、線程I/O模型、Java內存模型、並發知識、AQS同步器、常見的同步器、原子類、阻塞隊列、鎖、任務執行器、其他並發工具等內容。此外,還在最後一章介紹瞭如何使用C++來模擬實現Java線程。
《圖解Java並發編程》適合Java中高級開發人員、對Java並發編程機制感興趣的人員以及Java架構師閱讀。
作者簡介
汪建,筆名 seaboat,畢業於廣東工業大學光信息科學與技術專業,畢業後從事各類業務系統、中間件、基礎架構、人工智能係統等研發工作,目前致力於用AI提升企業業務系統效率以節約人力成本。
擅長工程算法、人工智能算法、自然語言處理、計算機視覺、架構、分佈式、高並發、大數據、搜索引擎等方面的技術,會使用大多數編程語言,更擅長Java、Python和C++。
平時喜歡看書、運動、寫作、編程、繪畫。崇尚開源,崇尚技術自由。已出版的圖書有《圖解數據結構與算法》《Tomcat內核設計剖析》。
個人博客:blog.csdn.net/wangyangzhizhou。
目錄大綱
第 1章 線程機制 1
1.1 線程是什麼 1
1.2 線程的映射 3
1.2.1 多對一映射 4
1.2.2 一對一映射 4
1.2.3 多對多映射 5
1.2.4 Java層到內核層 6
1.3 Java線程的狀態 7
1.4 Java線程的調度 10
1.5 Java線程的優先級與執行機制 11
1.6 Java線程的CPU時間 14
1.7 Java線程的yield操作 15
1.8 Java線程的sleep操作 17
1.9 Java線程的Interrupt操作 20
1.9.1 可運行狀態的中斷 23
1.9.2 阻塞/等待狀態的中斷 23
1.9.3 經典中斷實現方式 24
1.9.4 park的特殊中斷 26
1.10 Java線程的阻塞與喚醒 26
1.11 Java線程的join操作 34
第 2章 線程I/O模型 38
2.1 線程與阻塞I/O 38
2.1.1 單線程阻塞I/O模型 39
2.1.2 多線程阻塞I/O模型 40
2.2 線程與非阻塞I/O模型 41
2.2.1 應用層I/O多路復用 43
2.2.2 內核I/O多路復用 43
2.2.3 內核回調事件驅動I/O 44
2.3 Java多線程非阻塞I/O模型 46
2.4 多線程帶來了什麼 48
2.4.1 提升執行效率 49
2.4.2 提升用戶體驗 50
2.4.3 讓編碼更難 50
2.4.4 資源開銷與上下文切換開銷 51
第3章 Java內存模型 53
3.1 計算機的運行 53
3.2 Java內存模型 56
3.3 volatile能否保證線程安全 59
3.4 happens-before原則 62
3.4.1 單線程原則 65
3.4.2 鎖原則 66
3.4.3 volatile原則 67
3.4.4 線程start原則 67
3.4.5 線程join原則 68
3.4.6 線程interrupt原則 68
3.4.7 finalize原則 69
3.4.8 傳遞原則 70
3.5 Java指令重排 70
第4章 並發知識 75
4.1 synchronized互斥鎖 75
4.1.1 作用在對象方法上 76
4.1.2 作用在類靜態方法上 79
4.1.3 作用在對象方法裡面 80
4.1.4 作用在類靜態方法裡面 81
4.2 樂觀的並發策略 85
4.3 自旋鎖 87
4.3.1 UMA架構與NUMA架構 88
4.3.2 原始自旋鎖 90
4.3.3 排隊自旋鎖 91
4.3.4 CLH鎖 93
4.3.5 MCS鎖 95
4.4 線程飢餓 97
4.4.1 synchronized飢餓 97
4.4.2 優先級飢餓 99
4.4.3 線程自旋飢餓 100
4.4.4 等待喚醒飢餓 101
4.4.5 公平性解決飢餓 102
4.5 數據競爭 104
4.6 競爭條件 108
4.6.1 線程執行順序的不確定性 110
4.6.2 並發機制 111
4.7 死鎖 113
4.7.1 鎖的順序化 116
4.7.2 資源合併 116
4.7.3 避免鎖嵌套 117
4.7.4 鎖超時機制 117
4.7.5 搶占資源機制 118
4.7.6 撤銷線程機制 118
4.7.7 死鎖的檢測 119
第5章 AQS同步器 120
5.1 什麼是AQS同步器 120
5.2 AQS的等待隊列與狀態轉換 120
5.3 AQS的獨占鎖與共享鎖 125
5.4 AQS獨占鎖獲取與釋放 127
5.4.1 獲取獨占鎖的邏輯 128
5.4.2 嘗試獲取獨占鎖 130
5.4.3 入隊操作邏輯 130
5.4.4 入隊後的操作 132
5.4.5 虛節點可能消失 133
5.4.6 取消鎖獲取操作 134
5.4.7 喚醒後繼節點 136
5.4.8 釋放獨占鎖的邏輯 137
5.5 AQS共享鎖獲取與釋放 138
5.5.1 獲取共享鎖的邏輯 138
5.5.2 入隊操作 140
5.5.3 入隊後的操作 140
5.5.4 引入PROPAGATE狀態 143
5.5.5 釋放共享鎖的邏輯 146
5.6 AQS的阻塞與喚醒 146
5.6.1 許可機制 148
5.6.2 LockSupport示例 149
5.6.3 park與unpark的順序 150
5.6.4 park對中斷的響應 151
5.6.5 park是否會釋放鎖 152
5.6.6 LockSupport的實現 154
5.7 AQS的中斷機制 156
5.7.1 synchronized不支持中斷 157
5.7.2 AQS獨占模式的中斷 158
5.7.3 AQS共享模式的中斷 160
5.8 AQS的超時機制 161
5.8.1 synchronized不支持超時 161
5.8.2 AQS獨占模式的超時 162
5.8.3 AQS共享模式的超時 163
5.9 AQS的原子性如何保證 164
5.10 AQS的自旋鎖 175
5.11 AQS的公平性 177
5.12 AQS的條件隊列 179
5.12.1 await方法 179
5.12.2 signal方法 182
5.13 AQS自定義同步器 183
5.13.1 AQS設計思想 183
5.13.2 獨占模式 184
5.13.3 共享模式 186
第6章 常見的同步器 189
6.1 常見的同步器 189
6.2 閉鎖 192
6.3 信號量 197
6.3.1 非公平模式的實現 198
6.3.2 公平模式的實現 201
6.3.3 信號量的使用示例 202
6.4 循環屏障 204
6.5 相位器 210
6.5.1 相位器的主要概念及方法 211
6.5.2 相位器的3個例子 212
6.5.3 相位器的狀態示意圖 215
6.5.4 相位器的實現原理 216
6.6 交換器 220
6.6.1 交換器的實現原理 223
6.6.2 交換器的單槽模式 226
6.6.3 交換器的多槽模式 228
第7章 原子類 233
7.1 原子整型 233
7.1.1 一行代碼等於原子性嗎 233
7.1.2 volatile能保證原子性嗎 234
7.1.3 synchronized能解決問題嗎 235
7.1.4 AtomicInteger 237
7.1.5 實現原理 238
7.2 原子引用 239
7.3 原子數組 243
7.3.1 AtomicIntegerArray 244
7.3.2 AtomicLongArray 247
7.3.3 AtomicReferenceArray 248
7.4 原子變量更新器 249
第8章 阻塞隊列 254
8.1 阻塞隊列概述 254
8.2 數組阻塞隊列 258
8.3 鍊錶阻塞隊列 263
8.4 優先級阻塞隊列 271
8.5 延遲阻塞隊列 279
8.5.1 優先級隊列 281
8.5.2 DelayQueue的阻塞與喚醒 283
8.5.3 DelayQueue的實現原理 284
8.6 鍊錶阻塞的雙向隊列 288
第9章 鎖 298
9.1 可重入鎖 298
9.1.1 非公平模式的實現 299
9.1.2 公平模式的實現 301
9.1.3 公平模式的3個示例 302
9.2 讀寫鎖 305
9.2.1 讀寫鎖的性質 306
9.2.2 簡單的實現版本 307
9.2.3 讀寫鎖的升級與降級 308
9.2.4 讀寫鎖的實現思想 309
9.2.5 讀寫鎖的共用狀態變量 312
9.2.6 讀寫鎖的公平/非公平模式 313
9.2.7 寫鎖的實現 314
9.2.8 讀鎖的實現 315
9.2.9 讀寫鎖的使用示例 317
9.3 鎖的條件機制 318
9.3.1 wait/notify模式 318
9.3.2 Condition 320
第 10章 任務執行器 322
10.1 任務執行器接口 322
10.1.1 同步執行器 322
10.1.2 一對一執行器 323
10.1.3 線程池執行器 323
10.1.4 串行執行器 325
10.2 任務執行器的ExecutorService接口 326
10.3 線程池任務執行器 331
10.3.1 線程池任務執行器的運行狀態 332
10.3.2 線程池任務執行器的使用示例 334
10.3.3 線程池任務執行器的實現原理 335
第 11章 其他並發工具 344
11.1 線程本地變量 344
11.1.1 線程本地變量的使用示例 344
11.1.2 線程本地變量的3個主要方法 346
11.1.3 JDK中線程本地變量的實現思想 347
11.1.4 JDK中線程本地變量的實現源碼 348
11.1.5 線程本地變量的內存洩漏 352
11.2 寫時復制數組列表 353
第 12章 C++模擬實現Java線程 359
12.1 模擬實現Java線程 359
12.2 模擬實現yield語義 365
12.3 模擬實現sleep操作 367
12.4 模擬實現synchronized語義 369
12.5 模擬實現Interrupt操作 372