Java高並發編程詳解:多線程與架構設計 Java高并发编程详解:多线程与架构设计

汪文君

  • 出版商: 機械工業出版社
  • 出版日期: 2018-06-01
  • 定價: $534
  • 售價: $534
  • 貴賓價: 9.5$507
  • 語言: 簡體中文
  • 頁數: 378
  • 裝訂: 平裝
  • ISBN: 7111599934
  • ISBN-13: 9787111599937

立即出貨

買這商品的人也買了...

商品描述

本書共分為四個部分:部分詳細地介紹了Java多線程的基本用法和各個API的使用,並且著重介紹了線程與Java虛擬機內存之間的關系。第二部分由線程上下文類加載器方法引入,介紹為什麽在線程中要有上下文類加載器的方法函數,從而掌握類在JVM的加載和初始化的整個過程。第三部分主要圍繞著volatile關鍵字展開,在該部分中我們將會瞭解到現代CPU的架構以及Java的內存模型(JMM)。後一部分,主要站在架構設計的高度看待如何巧妙地開發出真正具備並發能力的系統。

目錄大綱

前言
第一部分多線程基礎
第1章快速認識線程3 
1.1線程的介紹3 
1.2快速創建並啟動一個線程3 
1.2.1嘗試並行運行4 
1.2. 2並發運行交替輸出5 
1.2.3使用Jconsole觀察線程6 
1.3線程的生命週期詳解7 
1.3.1線程的NEW狀態8 
1.3.2線程的RUNNABLE狀態8 
1.3.3線程的RUNNING狀態8 
1.3.4線程的BLOCKED狀態8 
1.3.5線程的TERMINATED狀態9 
1.4線程的start方法剖析:模板設計模式在Thread中的應用9 
1.4.1 Thread start方法源碼分析以及注意事項9 
1.4.2模板設計模式在Thread中的應用11 
1.4.3 Thread模擬營業大廳叫號機程序13 
1.5 Runnable接口的引入以及策略模式在Thread中的使用16 
1.5.1 Runnable的職責16 
1.5.2策略模式在Thread中的應用16 
1.5.3模擬營業大廳叫號機程序18
1.6本章總結19 

第2章深入理解Thread構造函數20 
2.1線程的命名20 
2.1.1線程的默認命名21 
2.1.2命名線程21 
2.1.3修改線程的名字22 
2.2線程的父子關係22 
2.3 Thread與ThreadGroup 23 
2.4 Thread與Runnable 24 
2.5 Thread與JVM虛擬機棧25 
2.5.1 Thread與Stacksize 25 
2.5.2 JVM內存結構27 
2.5.3 Thread與虛擬機棧30 
2.6守護線程33 
2.6.1什麼是守護線程33 
2.6 .2守護線程的作用34 
2.7本章總結34 

第3章Thread API的詳細介紹35 
3.1線程sleep 35 
3.1.1 sleep方法介紹35 
3.1.2使用TimeUnit替代Thread.sleep 36 
3.2線程yield 37 
3.2.1 yield方法介紹37 
3.2.2 yield和sleep 37 
3.3設置線程的優先級38 
3.3.1線程優先級介紹38 
3.3.2線程優先級源碼分析39
3.3.3關於優先級的一些總結40 
3.4獲取線程ID 40 
3.5獲取當前線程41 
3.6設置線程上下文類加載器41 
3.7線程interrupt 42 
3.7.1 interrupt 42 
3.7.2 isInterrupted 43 
3.7.3 interrupted 45 
3.7.4 interrupt注意事項46 
3.8線程join 47 
3.8.1線程join方法詳解48 
3.8.2 join方法結合實戰50 
3.9如何關閉一個線程53 
3.9.1正常關閉54 
3.9.2異常退出56 
3.9.3進程假死56 
3.10本章總結58 

第4章線程安全與數據同步59 
4.1數據同步59 
4.1.1數據不一致問題的引入59 
4.1.2數據不一致問題原因分析61 
4.2初識synchronized關鍵字62 
4.2.1什麼是synchronized 63 
4.2.2 synchronized關鍵字的用法63 
4.3深入synchronized關鍵字65 
4.3.1線程堆棧分析65 
4.3.2 JVM指令分析67
4.3.3使用synchronized需要注意的問題70 
4.4 This Monitor和Class Monitor的詳細介紹72 
4.4.1 this monitor 72 
4.4.2 class monitor 74 
4.5程序死鎖的原因以及如何診斷77 
4.5.1程序死鎖77 
4.5 .2程序死鎖舉例77 
4.5.3死鎖診斷80 
4.6本章總結81
 
第5章線程間通信82 
5.1同步阻塞與異步非阻塞82 
5.1.1同步阻塞消息處理82 
5.1.2異步非阻塞消息處理83 
5.2單線程間通信84 
5.2.1初識wait和notify 84 
5.2.2 wait和notify方法詳解87 
5.2.3關於wait和notify的注意事項89 
5.2.4 wait和sleep 90 
5.3多線程間通信90 
5.3. 1生產者消費者90 
5.3.2線程休息室wait set 93 
5.4自定義顯式鎖BooleanLock 94 
5.4.1 synchronized關鍵字的缺陷94 
5.4.2顯式鎖BooleanLock 95 
5.5本章總結104

第6章ThreadGroup詳細講解105 
6.1 ThreadGroup與Thread 105 
6.2創建ThreadGroup 105 
6.3複製Thread數組和ThreadGroup數組106 
6.3.1複製Thread數組106 
6.3.2複製ThreadGroup數組109 
6.4 ThreadGroup操作109 
6.4.1 ThreadGroup的基本操作110 
6.4.2 ThreadGroup的interrupt 113 
6.4.3 ThreadGroup的destroy 114 
6.4.4守護ThreadGroup 115 
6.5本章總結116 

第7章Hook線程以及捕獲線程執行異常117 
7.1獲取線程運行時異常117 
7.1.1 UncaughtExceptionHandler的介紹117 
7.1 .2 UncaughtExceptionHandler實例118 
7.1.3 UncaughtExceptionHandler源碼分析119 
7.2注入鉤子線程121 
7.2.1 Hook線程介紹121 
7.2.2 Hook線程實戰122 
7.2.3 Hook線程應用場景以及注意事項124 
7.3本章總結124

第8章線程池原理以及自定義線程池125 
8.1線程池原理125 
8.2線程池實現126 
8.2.1線程池接口定義127 
8.2.2線程池詳細實現131 
8.3線程池的應用139 
8.4本章總結142 

第二部分Java ClassLoader 
第9章類的加載過程144 
9.1類的加載過程簡介144 
9.2類的主動使用和被動使用145 
9.3類的加載過程詳解148 
9.3.1類的加載階段148 
9.3.2類的連接階段149 
9.3.3類的初始化階段154 
9.4本章總結156 

第10章JVM類加載器158 
10.1 JVM內置三大類加載器158 
10.1.1根類加載器介紹159 
10.1.2擴展類加載器介紹159 
10.1.3系統類加載器介紹160 
10.2自定義類加載器161 
10.2.1自定義類加載器,問候世界161 
10.2.2雙親委託機制詳細介紹165 
10.2.3破壞雙親委託機制167 
10.2.4類加載器命名空間、運行時包、類的卸載等170 
10.3本章總結175

第11章線程上下文類加載器177 
11.1為什麼需要線程上下文類加載器177 
11.2數據庫驅動的初始化源碼分析178 
11.3本章總結180 

第三部分深入理解volatile關鍵字
第12章volatile關鍵字的介紹182 
12.1初識volatile關鍵字182 
12.2機器硬件CPU 184 
12.2.1 CPU Cache模型184 
12.2.2 CPU緩存一致性問題186 
12.3 Java內存模型187 
12.4本章總結188 

第13章深入volatile關鍵字189 
13.1並發編程的三個重要特性189 
13.1.1原子性189 
13.1.2可見性190 
13.1.3有序性190 
13.2 JMM如何保證三大特性191 
13.2.1 JMM與原子性192 
13.2.2 JMM與可見性193 
13.2.3 JMM與有序性194 
13.3 volatile關鍵字深入解析195 
13.3.1 volatile關鍵字的語義195 
13.3.2 volatile的原理和實現機制197 
13.3.3 volatile的使用場景198
13.3.4 volatile和synchronized 199 
13.4本章總結200 

第14章7種單例設計模式的設計201 
14.1餓漢式201 
14.2懶漢式202 
14.3懶漢式+同步方法203 
14.4 Double-Check 204 
14.5 Volatile+Double-Check 206 
14.6 Holder方式206 
14.7枚舉方式207 
14.8本章總結208 

第四部分多線程設計架構模式
第15章監控任務的生命週期212 
15.1場景描述212 
15.2當觀察者模式遇到Thread 212 
15.2.1接口定義212 
15.2.2 ObservableThread實現215 
15.3本章總結217 
15.3.1測試運行217 
15.3.2關鍵點總結219 

第16章Single Thread Execution設計模式220 
16.1機場過安檢220 
16.1.1非線程安全221 
16.1.2問題分析223 
16.1.3線程安全225 
16.2吃麵問題225
16.2.1吃麵引起的死鎖226 
16.2.2解決吃麵引起的死鎖問題228 
16.2.3哲學家吃麵229 
16.3本章總結230 

第17章讀寫鎖分離設計模式231 
17.1場景描述231 
17.2讀寫分離程序設計232 
17.2.1接口定義232 
17.2.2程序實現234 
17.3讀寫鎖的使用239 
17.4本章總結242 

第18章不可變對象設計模式244 
18.1線程安全性244 
18.2不可變對象的設計244 
18.2 .1非線程安全的累加器245 
18.2.2方法同步增加線程安全性247 
18.2.3不可變的累加器對象設計248 
18.3本章總結249 

第19章Future設計模式251 
19.1先給你一張憑據251 
19.2 Future設計模式實現251 
19.2.1接口定義252 
19.2.2程序實現253 
19.3 Future的使用以及技巧總結256 
19.4增強FutureService使其支持回調257 
19.5本章總結258

第20章Guarded Suspension設計模式259 
20.1什麼是Guarded Suspension設計模式259 
20.2 Guarded Suspension的示例259 
20.3本章總結261 

第21章線程上下文設計模式262 
21.1什麼是上下文262 
21.2線程上下文設計263 
21.3 ThreadLocal詳解264 
21.3. 1 ThreadLocal的使用場景及注意事項265 
21.3.2 ThreadLocal的方法詳解及源碼分析265 
21.3.3 ThreadLocal的內存洩漏問題分析270 
21.4使用ThreadLocal設計線程上下文274 
21.5本章總結276 

第22章Balking設計模式277 
22.1什麼是Balking設計277 
22.2 Balking模式之文檔編輯278 
22.2.1 Document 278 
22.2.2 AutoSaveThread 280 
22.2.3 DocumentEditThread 281 
22.3本章總結283 

第23章Latch設計模式284 
23.1什麼是Latch 284 
23.2 CountDownLatch程序實現285
23.2.1無限等待的Latch 285 
23.2.2有超時設置的Latch 289 
23.3本章總結291 

第24章Thread-Per-Message設計模式293 
24.1什麼是Thread-Per-Message模式293 
24.2每個任務一個線程293 
24.3多用戶的網絡聊天296 
24.3.1服務端程序296 
24.3.2響應客戶端連接的Handler 297 
24.3.3聊天程序測試299 
24.4本章總結300 

第25章Two Phase Termination設計模式301 
25.1什麼是Two Phase Termination模式301 
25.2 Two Phase Termination的示例302 
25.2.1線程停止的Two Phase Termination 302 
25.2.2進程關閉的Two Phase Termination 303 
25.3知識擴展304 
25.3.1 Strong Reference及LRUCache 304 
25.3.2 Soft Reference及SoftLRUCache 308 
25.3. 3 Weak Reference 311 
25.3.4 Phantom Reference 312
25.4本章總結314 

第26章Worker-Thread設計模式315 
26.1什麼是Worker-Thread模式315 
26.2 Worker-Thread模式實現315