Java 多線程與線程池技術詳解
肖海鵬 牟東旭
買這商品的人也買了...
-
$480$379 -
$690$587 -
$454Netty 權威指南, 2/e
-
$474$450 -
$658揭秘 Java 虛擬機 : JVM 設計原理與實現
-
$534$507 -
$474$450 -
$474$450 -
$534$507 -
$414$393 -
$454JVM G1 源碼分析和調優
-
$454新一代垃圾回收器ZGC設計與實現
-
$474$450 -
$774$735 -
$534$507 -
$301Netty 實戰
-
$354$336 -
$474$450 -
$454深入理解 React Router:從原理到實踐
-
$760Java 高並發核心編程 捲1 (NIO\Netty\Redis\ZooKeeper)
-
$658Java 高並發核心編程. 卷2, 多線程、鎖、JMM、JUC、高並發設計模式
-
$301Java 網絡編程進階 — 從 BIO 到 RPC
-
$407Android 數據庫最佳實踐 (Android Database Best Practices)
-
$454高性能 Java 架構:核心原理與案例實戰
-
$600$468
相關主題
商品描述
《Java多線程與線程池技術詳解》全面、系統地講解了多線程和線程池技術。 《Java多線程與線程池技術詳解》共分為10章,第1~3章為基本的多線程技術基礎,包含創建線程、線程狀態轉換、線程間同步等內容。第4~8章為線程池技術,包含自定義線程池、通過Executors工具類創建線程池、線程池的底層阻塞隊列結構、重入鎖等內容。第9章和第10章為多線程技術的應用部分,包含基於Tomcat的線程池應用、基於ThreadLocal的數據庫連接管理、生成唯一的訂單號等內容。 《Java多線程與線程池技術詳解》提供了大量應用實例,每章後面均附有習題。 《Java多線程與線程池技術詳解》適合作為高等院校電腦、軟件工程專業高年級本科生、研究生的教材,同時可供有一定編程經驗的軟件開發人員、廣大科技工作者和研究人員在進行多線程編程時參考使用。
作者簡介
肖海鵬,人力資源和社會保障部高級職稱;51CTO金牌講師;具有10年大型項目經驗和10年Java教學經驗;曾任職E龍網架構師、TechFaith系統工程師等。
在網絡上推出了“JavaWeb應用開發技術”“SSM+SpringBoot實戰技術”“多線程與線程池技術詳解”等視頻教程,廣受網友好評。
牟東旭,富景天策(北京)科技集團公司高級項目經理。
多年從事互聯網一線開發工作,曾在某互聯網教育機構擔任高級講師,精通SSM、SpringBoot、SpringCloud等主流Java開源框架以及Hadoop、Kafka、Hive、HBASEStorm、Spark、Kylin等主流大數據技術。
目前專注於專業氣象服務領域的產品策劃、技術架構和產品開發工作。
目錄大綱
第1章 多線程基礎 1
1.1 進程與線程 1
1.1.1 操作系統與進程 1
1.1.2 線程與進程的關系 2
1.2 多線程啟動 3
1.2.1 線程標識 5
1.2.2 Thread與Runnable 6
1.2.3 run()與start() 7
1.2.4 Thread源碼分析 9
1.3 線程狀態 11
1.3.1 NEW狀態 11
1.3.2 RUNNABLE狀態 12
1.3.3 BLOCKED狀態 13
1.3.4 WAITING狀態 14
1.3.5 TIMED_WAITING狀態 19
1.3.6 WAITING與BLOCKED的區別 21
1.3.7 TERMINATED狀態 21
1.3.8 線程狀態轉換 22
1.4 sleep()與yield() 22
1.4.1 線程休眠sleep() 22
1.4.2 線程讓步yield() 24
1.5 線程優先級 25
1.5.1 線程優先級與資源競爭 26
1.5.2 案例:大型浮點運算測試 26
1.5.3 案例:多線程售票 28
1.6 守護線程 30
1.6.1 守護線程的概念 30
1.6.2 案例:清道夫與工作者 31
1.7 本章習題 34
第2章 線程安全與共享資源競爭 37
2.1 synchronized同步介紹 37
2.2 synchronized同步方法 38
2.2.1 同步方法調用流程 41
2.2.2 同步方法之間的互斥 41
2.2.3 同步方法與異步方法 44
2.3 synchronized同步靜態方法 46
2.3.1 單例高並發問題 46
2.3.2 類鎖與對象鎖 47
2.3.3 靜態同步方法之間互斥 47
2.3.4 靜態同步方法與靜態異步方法 49
2.4 synchronized同步代碼塊 50
2.4.1 鎖當前對象 50
2.4.2 鎖其他對象 51
2.4.3 鎖Class 51
2.5 項目案例:火車售票 52
2.5.1 共享任務模式 52
2.5.2 多任務模式 55
2.5.3 共享車票資源 56
2.6 項目案例:家庭消費 59
2.7 項目案例:別墅Party 63
2.7.1 無鎖模式 63
2.7.2 單鎖模式 66
2.7.3 雙鎖模式 67
2.8 JDK常見類的線程安全性 69
2.8.1 集合ArrayList與Vector 69
2.8.2 StringBuffer與StringBuilder 71
2.8.3 HashMap與ConcurrentHashMap 72
2.9 本章習題 73
第3章 多線程通信 76
3.1 wait()與notify() 76
3.1.1 阻塞當前線程 76
3.1.2 案例分析:廚師與侍者1 78
3.1.3 案例分析:廚師與侍者2 81
3.1.4 案例分析:兩個線程交替輸出信息 85
3.2 join線程排隊 87
3.2.1 加入者與休眠者 87
3.2.2 案例:緊急任務處理 89
3.2.3 join限時阻塞 91
3.3 線程中斷 93
3.3.1 中斷運行態線程 93
3.3.2 中斷阻塞態線程 95
3.3.3 如何停止線程 97
3.4 CountDownLatch計數器 98
3.5 CyclicBarrier屏障 100
3.5.1 案例:矩陣分行處理 101
3.5.2 案例:賽馬游戲 103
3.6 Exchanger 104
3.7 Semaphore信號燈 107
3.8 死鎖 108
3.8.1 案例:銀行轉賬引發死鎖 109
3.8.2 案例:哲學家就餐死鎖 112
3.9 本章習題 115
第4章 線程池入門 117
4.1 ThreadPoolExecutor 117
4.1.1 創建線程池 118
4.1.2 關閉線程池 121
4.2 Executor接口 123
4.3 ExecutorService接口 124
4.3.1 Callable返回任務執行結果 125
4.3.2 shutdown與shutdownNow 127
4.4 Executors工具箱 127
4.4.1 newCachedThreadPool 128
4.4.2 newFixedThreadPool 133
4.4.3 newSingleThreadExecutor 137
4.4.4 newScheduledThreadPool 141
4.4.5 newWorkStealingPool 143
4.5 線程工廠與線程組 151
4.5.1 線程組 151
4.5.2 線程與線程組 152
4.5.3 線程工廠接口 155
4.5.4 默認線程工廠實現 156
4.5.5 線程池與線程工廠 157
4.6 線程池異常處理 158
4.6.1 異常捕獲 158
4.6.2 UncaughtExceptionHandler處理異常 158
4.6.3 Future處理異常 161
4.7 本章習題 163
第5章 線程池與鎖 165
5.1 重入鎖ReentrantLock 165
5.1.1 重入鎖 166
5.1.2 互斥鎖 167
5.1.3 ReentrantLock與synchronized 169
5.1.4 嘗試加鎖並限時等待 171
5.2 重入鎖與Condition 173
5.2.1 案例分析:廚師與侍者 176
5.2.2 案例分析:緩沖區隊列 178
5.3 讀鎖與寫鎖 181
5.3.1 案例:並發讀寫集合 182
5.3.2 案例:Map並發控制 193
5.3.3 數據庫事務與鎖 197
5.4 公平鎖與非公平鎖 198
5.5 本章習題 201
第6章 線程池與阻塞隊列 202
6.1 Queue接口 202
6.2 BlockingQueue接口 202
6.3 BlockingQueue實現類 203
6.4 LinkedBlockingQueue與ArrayBlockingQueue 203
6.4.1 阻塞隊列的單鎖與雙鎖 204
6.4.2 ArrayBlockingQueue並發分析 205
6.4.3 LinkedBlockingQueue並發分析 206
6.4.4 案例:12306搶票 208
6.5 生產者與消費者模式 210
6.5.1 基於管道發送與接收消息 211
6.5.2 基於阻塞隊列發送與接收消息 213
6.5.3 案例:醫院掛號 213
6.6 SynchronousQueue 217
6.6.1 同步隊列應用場景 217
6.6.2 案例:Web服務器處理並發請求 218
6.7 延遲阻塞隊列 220
6.7.1 案例:元素延遲出隊 221
6.7.2 項目案例:Web服務器會話管理 222
6.8 PriorityBlockingQueue 226
案例:按優先級執行任務 226
6.9 LinkedTransferQueue 228
6.10 LinkedBlockingDeque 229
6.11 本章習題 229
第7章 線程池與AQS 231
7.1 acquire與release 231
7.2 性能目標 232
7.3 設計與實現 233
7.3.1 同步狀態 233
7.3.2 阻塞 244
7.3.3 排隊 246
7.3.4 條件隊列 248
7.4 使用AQS 249
7.4.1 控制公平性 250
7.4.2 同步器 251
7.5 AQS性能 252
7.5.1 過載 253
7.5.2 吞吐量 254
7.6 本章習題 255
第8章 結束線程與線程池任務 257
8.1 stop()與destroy() 257
8.2 狀態值結束線程 258
8.3 shutdown()與shutdownNow() 258
8.4 線程休眠 258
8.5 線程中斷 258
8.6 Future與FutureTask 258
8.6.1 取消任務 259
8.6.2 任務超時結束 263
8.7 項目案例:所有線程池任務暫停與重啟 264
8.8 本章習題 267
第9章 Tomcat線程池技術 268
9.1 自定義ThreadPoolExecutor 268
9.2 Tomcat任務隊列 270
9.3 Tomcat任務線程 270
9.4 Tomcat任務線程工廠 271
9.5 Tomcat連接器與線程池 272
9.6 創建Tomcat線程池 274
9.7 Web服務器異步環境 275
案例:AsyncContext調用業務方法 276
9.8 Web服務器NIO 278
案例:服務器NIO處理請求 279
9.9 本章習題 281
第10章 並發編程應用 283
10.1 JVM與多線程 283
10.2 Servlet與多線程 284
10.3 懶漢與惡漢模式 286
10.4 數據庫Connection與多線程 288
10.4.1 ThreadLocal與線程私有數據 289
10.4.2 ThreadLocal存儲數據庫Connection 291
10.4.3 ThreadLocal實現Connection per logic模式 293
10.4.4 ThreadLocal實現Connection per request模式 294
10.5 高並發網站的PageView統計 295
10.6 生成唯一的訂單號 296
10.7 瀏覽器並發請求限制 298
10.8 NIO與多路復用 301
10.9 遠程異步訪問 302
10.10 防止緩存雪崩的DCL機制 305
10.11 分佈式鎖解決商品超賣 309
參考文獻 314