商品簡介
本書聚焦Java併發編程基礎知識,介紹了Java多線程、線程池、內置鎖、JMM、CAS、JUC、高併發設計模式等併發編程方面的核心原理和實戰知識。
本書共分為10章。第1~2章淺顯易懂地剖析多線程、線程池的核心原理和實戰使用,揭秘線程安全問題和Java內置鎖的核心原理;第3~4章細緻地講解CAS原理與JUC原子類、JMM的核心原理,揭秘CAS操作的弊端和兩類規避措施、解密Java如何內存可見性和volatile關鍵字的底層知識;第5章細緻地介紹JUC顯示鎖的原理和各種顯示鎖的使用;第6章圖文並茂、深入淺出地闡述JUC高併發的基礎設施:AQS抽象同步器核心原理;第7章介紹JUC容器類;第8~10章介紹常見的Java高併發設計模式的原理和使用。
名人推薦
Java高併發編程基礎知識,多線程、鎖、JMM、JUC、高併發設計模式
目次
前言
自序
第1章 多線程原理與實戰 1
1.1 兩個技術面試故事 1
1.2 無處不在的進程和線程 2
1.2.1 進程的基本原理 3
1.2.2 線程的基本原理 5
1.2.3 進程與線程的區別 8
1.3 創建線程的4種方法 8
1.3.1 Thread類詳解 8
1.3.2 創建一個空線程 10
1.3.3 線程創建方法一:繼承Thread類創建線程類 12
1.3.4 線程創建方法二:實現Runnable接口創建線程目標類 13
1.3.5 優雅創建Runnable線程目標類的兩種方式 16
1.3.6 通過實現Runnable接口的方式創建線程目標類的優缺點 18
1.3.7 線程創建方法三:使用Callable和FutureTask創建線程 23
1.3.8 線程創建方法四:通過線程池創建線程 28
1.4 線程的核心原理 31
1.4.1 線程的調度與時間片 31
1.4.2 線程的優先級 32
1.4.3 線程的生命週期 35
1.4.4 一個線程狀態的簡單演示案例 37
1.4.5 使用Jstack工具查看線程狀態 40
1.5 線程的基本操作 41
1.5.1 線程名稱的設置和獲取 41
1.5.2 線程的sleep操作 43
1.5.3 線程的interrupt操作 45
1.5.4 線程的join操作 48
1.5.5 線程的yield操作 53
1.5.6 線程的daemon操作 55
1.5.7 線程狀態總結 61
1.6 線程池原理與實戰 62
1.6.1 JUC的線程池架構 63
1.6.2 Executors的4種快捷創建線程池的方法 65
1.6.3 線程池的標準創建方式 72
1.6.4 向線程池提交任務的兩種方式 73
1.6.5 線程池的任務調度流程 77
1.6.6 ThreadFactory(線程工廠) 79
1.6.7 任務阻塞隊列 81
1.6.8 調度器的鉤子方法 82
1.6.9 線程池的拒絕策略 84
1.6.10 線程池的優雅關閉 87
1.6.11 Executors快捷創建線程池的潛在問題 93
1.7 確定線程池的線程數 97
1.7.1 按照任務類型對線程池進行分類 97
1.7.2 為IO密集型任務確定線程數 98
1.7.3 為CPU密集型任務確定線程數 100
1.7.4 為混合型任務確定線程數 101
1.8 ThreadLocal原理與實戰 104
1.8.1 ThreadLocal的基本使用 104
1.8.2 ThreadLocal的使用場景 107
1.8.3 使用ThreadLocal進行線程隔離 108
1.8.4 使用ThreadLocal進行跨函數數據傳遞 109
1.8.5 ThreadLocal內部結構演進 110
1.8.6 ThreadLocal源碼分析 111
1.8.7 ThreadLocalMap源碼分析 114
1.8.8 ThreadLocal綜合使用案例 119
第2章 Java內置鎖的核心原理 123
2.1 線程安全問題 123
2.1.1 自增運算不是線程安全的 123
2.1.2 臨界區資源與臨界區代碼段 126
2.2 synchronized關鍵字 127
2.2.1 synchronized同步方法 127
2.2.2 synchronized同步塊 128
2.2.3 靜態的同步方法 130
2.3 生產者-消費者問題 131
2.3.1 生產者-消費者模式 131
2.3.2 一個線程不安全的實現版本 132
2.3.3 一個線程安全的實現版本 139
2.4 Java對象結構與內置鎖 140
2.4.1 Java對象結構 141
2.4.2 Mark Word的結構信息 143
2.4.3 使用JOL工具查看對象的佈局 145
2.4.4 大小端問題 149
2.4.5 無鎖、偏向鎖、輕量級鎖和重量級鎖 150
2.5 偏向鎖的原理與實戰 152
2.5.1 偏向鎖的核心原理 152
2.5.2 偏向鎖的演示案例 152
2.5.3 偏向鎖的膨脹和撤銷 156
2.6 輕量級鎖的原理與實戰 157
2.6.1 輕量級鎖的核心原理 157
2.6.2 輕量級鎖的演示案例 158
2.6.3 輕量級鎖的分類 161
2.6.4 輕量級鎖的膨脹 162
2.7 重量級鎖的原理與實戰 162
2.7.1 重量級鎖的核心原理 162
2.7.2 重量級鎖的開銷 165
2.7.3 重量級鎖的演示案例 166
2.8 偏向鎖、輕量級鎖與重量級鎖的對比 169
2.9 線程間通信 170
2.9.1 線程間通信的定義 170
2.9.2 低效的線程輪詢 170
2.9.3 wait方法和notify方法的原理 171
2.9.4 “等待-通知”通信模式演示案例 174
2.9.5 生產者-消費者之間的線程間通信 177