作譯者:翟陸續,薛賓田
出版時間:2018-10
千 字 數:427
版次:01-01
頁 數:356
開本:16開裝幀:
I S B N :9787121349478
並發編程相比 Java 中其他知識點的學習門檻較高,從而導致很多人望而卻步。但無論是職場面試,還是高並發/ 高流量系統的實現,卻都離不開並發編程,於是能夠真正掌握並發編程的人成為了市場迫切需求的人才。本書通過圖文結合、通俗易懂的講解方式幫助大家完成多執行緒並發編程從入門到實踐的飛躍!全書分為三部分,第一部分為Java 並發編程基礎篇,主要講解Java 並發編程的基礎知識、執行緒有關的知識和並發編程中的其他相關概念,這些知識在高級篇都會有所使用,掌握了本篇的內容,就為學習高級篇奠定了基礎;第二部分為Java 並發編程高級篇,講解了Java 並發包中核心組件的實現原理,讓讀者知其然,也知其所以然,熟練掌握本篇內容,對我們在日常開發高並發、高流量的系統時會大有裨益;第三部分為Java 並發編程實踐篇,主要講解並發組件的使用方法,以及在使用過程中容易遇到的問題和解決方法。
第一部分 Java 並發編程基礎篇
第1 章 並發編程執行緒基礎 / 2
1.1 什麼是執行緒 / 2
1.2 執行緒創建與運行 / 3
1.3 執行緒通知與等待 / 6
1.4 等待執行緒執行終止的join 方法 / 16
1.5 讓執行緒睡眠的sleep 方法 / 19
1.6 讓出CPU 執行權的yield 方法 / 24
1.8 理解執行緒上下文切換 / 30
1.9 執行緒死鎖 / 30
1.9.1 什麼是執行緒死鎖 / 30
1.9.2 如何避免執行緒死鎖 / 33
1.10 守護執行緒與用戶執行緒 / 35
1.11 ThreadLocal / 39
1.11.1 ThreadLocal 使用示例 / 40
1.11.2 ThreadLocal 的實現原理 / 42
1.11.3 ThreadLocal 不支持繼承性 / 45
1.11.4 InheritableThreadLocal 類 / 46
第2 章 並發編程的其他基礎知識 / 50
2.1 什麼是多執行緒並發編程 / 50
2.2 為什麼要進行多執行緒並發編程 / 51
2.3 Java 中的執行緒安全問題 / 51
2.4 Java 中共享變數的記憶體可見性問題 / 52
2.5 Java 中的synchronized 關鍵字 / 54
2.5.1 synchronized 關鍵字介紹 / 54
2.5.2 synchronized 的記憶體語義 / 55
2.6 Java 中的volatile 關鍵字 / 55
2.7 Java 中的原子性操作 / 57
2.8 Java 中的CAS 操作 / 59
2.9 Unsafe 類 / 59
2.9.1 Unsafe 類中的重要方法 / 59
2.9.2 如何使用Unsafe 類 / 61
2.10 Java 指令重排序 / 65
2.11 偽共享 / 67
2.11.1 什麼是偽共享 / 67
2.11.2 為何會出現偽共享 / 68
2.11.3 如何避免偽共享 / 70
2.11.4 小結 / 72
2.12 鎖的概述 / 72
2.12.1 樂觀鎖與悲觀鎖 / 72
2.12.2 公平鎖與非公平鎖 / 75
2.12.3 獨占鎖與共享鎖 / 75
2.12.4 什麼是可重入鎖 / 76
2.12.5 自旋鎖 / 77
2.13 總結 / 77
第二部分 Java 並發編程高級篇
第3 章 Java 並發包中ThreadLocalRandom 類原理剖析 / 80
3.1 Random 類及其局限性 / 80
3.2 ThreadLocalRandom / 82
3.3 源碼分析 / 84
3.4 總結 / 87
第4 章 Java 並發包中原子操作類原理剖析
4.1 原子變數操作類 / 88
4.2 JDK 8 新增的原子操作類LongAdder / 93
4.2.1 LongAdder 簡單介紹 / 93
4.2.2 LongAdder 代碼分析 / 95
4.2.3 小結 / 101
4.3 LongAccumulator 類原理探究 / 102
4.4 總結 / 104
第5 章 Java 並發包中並發List 源碼剖析 / 105
5.1 介紹 / 105
5.2 主要方法源碼解析 / 106
5.2.1 初始化 / 106
5.2.2 添加元素 / 106
5.2.3 獲取指定位置元素 / 108
5.2.4 修改指定元素 / 109
5.2.5 刪除元素 / 110
5.2.6 弱一致性的疊代器 / 111
5.3 總結 / 114
第6 章 Java 並發包中鎖原理剖析 / 115
6.1 LockSupport 工具類 / 115
6.2 抽象同步佇列AQS 概述 / 122
6.2.1 AQS——鎖的底層支持 / 122
6.2.2 AQS——條件變數的支持 / 128
6.2.3 基於AQS 實現自定義同步器 / 131
6.3 獨占鎖ReentrantLock 的原理 / 136
6.3.1 類圖結構 / 136
6.3.2 獲取鎖 / 137
6.3.3 釋放鎖 / 142
6.3.4 案例介紹 / 143
6.3.5 小結 / 145
6.4 讀寫鎖ReentrantReadWriteLock 的原理 / 145
6.4.1 類圖結構 / 145
6.4.2 寫鎖的獲取與釋放 / 147
6.4.3 讀鎖的獲取與釋放 / 151
6.4.5 小結 / 158
6.5 JDK 8 中新增的StampedLock 鎖探究 / 158
6.5.1 概述 / 158
6.5.2 案例介紹 / 160
6.5.3 小結 / 164
第7 章 Java 並發包中並發佇列原理剖析 / 165
7.1 ConcurrentLinkedQueue 原理探究 / 165
7.1.1 類圖結構 / 165
7.1.2 ConcurrentLinkedQueue 原理介紹 / 166
7.1.3 小結 / 181
7.2 LinkedBlockingQueue 原理探究 / 182
7.2.1 類圖結構 / 182
7.2.2 LinkedBlockingQueue 原理介紹 / 185
7.2.3 小結 / 194
7.3 ArrayBlockingQueue 原理探究 / 195
7.3.1 類圖結構 / 195
7.3.2 ArrayBlockingQueue 原理介紹 / 197
7.3.3 小結 / 202
7.4 PriorityBlockingQueue 原理探究 / 203
7.4.1 介紹 / 203
7.4.2 PriorityBlockingQueue 類圖結構 / 203
7.4.3 原理介紹 / 205
7.4.4 案例介紹 / 214
7.4.5 小結 / 216
7.5 DelayQueue 原理探究 / 217
7.5.1 DelayQueue 類圖結構 / 217
7.5.2 主要函式原理講解 / 219
7.5.3 案例介紹 / 222
7.5.4 小結 / 224
第8 章 Java 並發包中執行緒池ThreadPoolExecutor 原理探究 / 225
8.1 介紹 / 225
8.2 類圖介紹 / 225
8.3 源碼分析 / 230
8.3.1 public void execute(Runnable command) / 230
8.3.2 工作執行緒Worker 的執行 / 235
8.3.3 shutdown 操作 / 238
8.3.4 shutdownNow 操作 / 240
8.3.5 awaitTermination 操作 / 241
8.4 總結 / 242
第9 章 Java 並發包中ScheduledThreadPoolExecutor 原理探究 / 243
9.1 介紹 / 243
9.2 類圖介紹 / 243
9.3 原理剖析 / 245
9.3.1 schedule(Runnable command, long delay,TimeUnit unit) 方法 / .246
9.3.2 scheduleWithFixedDelay(Runnable command,long initialDelay, long delay,
TimeUnit unit) 方法 / 252
9.3.3 scheduleAtFixedRate(Runnable command,long initialDelay,long period,
TimeUnit unit) 方法 / 254
9.4 總結 / 255
第10 章 Java 並發包中執行緒同步器原理剖析 / 256
10.1 CountDownLatch 原理剖析 / 256
10.1.1 案例介紹 / 256
10.1.2實現原理探究/259
10.1.3小結/263
10.2迴環屏障CyclicBarrier原理探究/264
10.2.1案例介紹/264
10.2.2實現原理探究/268
10.2.3小結/272
11.1ArrayBlockingQueue的使用/284
11.1.1異步日誌列印模型概述/284
11.1.2異步日誌與具體實現/285
11.1.3小結/293
11.2Tomcat的NioEndPoint中ConcurrentLinkedQueue的使用/293
11.2.1生產者——Acceptor執行緒/294
11.2.2消費者——Poller執行緒/298
11.2.3小結/300
11.3並發組件ConcurrentHashMap使用注意事項/300
11.4SimpleDateFormat是執行緒不安全的/304
11.4.1問題復現/304
11.4.2問題分析/305
11.4.3小結/309
11.5使用Timer時需要注意的事情/309
11.5.1問題的產生/309
11.5.2Timer實現原理分析/310
11.5.3小結/313
11.6對需要復用但是會被下游修改的參數要進行深複製/314
11.6.1問題的產生/314
11.6.2問題分析/316
11.6.3小結/318
11.7創建執行緒和執行緒池時要指定與業務相關的名稱/319
11.7.1創建執行緒需要有執行緒名/319
11.7.2創建執行緒池時也需要指定執行緒池的名稱/321
11.7.3小結/325
11.8使用執行緒池的情況下當程式結束時記得調用shutdown關閉執行緒池/325
11.8.1問題復現/325
11.8.2問題分析/327
11.8.3小結/329
11.9執行緒池使用FutureTask時需要注意的事情/329
11.9.1問題復現/329
11.9.2問題分析/332
11.9.3小結335
11.10使用ThreadLocal不當可能會導致記憶體泄漏/336
11.10.1為何會出現記憶體泄漏/336
11.10.2線上程池中使用ThreadLocal導致的記憶體泄漏/339
11.10.3在Tomcat的Servlet中使用ThreadLocal導致記憶體泄漏/341
11.10.4小結/344
11.11總結/344