第一部分:多線程基礎(chǔ) 20
第1章:快速認(rèn)識(shí)線程 22
1.1 線程的介紹 22
1.2 快速創(chuàng)建并啟動(dòng)一個(gè)線程 22
1.2.1 嘗試并行運(yùn)行 23
1.2.2 并發(fā)運(yùn)行交替輸出 24
1.2.3 使用Jconsole觀察線程 25
1.3 線程的生命周期詳解 26
1.3.1 線程的NEW狀態(tài) 27
1.3.2 線程的RUNNABLE狀態(tài) 28
1.3.3 線程的 RUNNING狀態(tài) 28
1.3.4 線程的BLOCKED狀態(tài) 29
1.3.5 線程的TERMINATED狀態(tài) 29
1.4 線程的start方法剖析--模板設(shè)計(jì)模式在Thread中的應(yīng)用 30
1.4.1 Thread
start方法源碼分析以及注意事項(xiàng) 30
1.4.2 模板設(shè)計(jì)模式在Thread中的應(yīng)用 33
1.4.3 Thread模擬營(yíng)業(yè)大廳叫號(hào)機(jī)程序 34
1.5 Runnable接口的引入以及策略模式在Thread中的使用 39
1.5.1 Runnable的職責(zé) 39
1.5.2 策略模式在Thread中的應(yīng)用 40
1.5.3 模擬營(yíng)業(yè)大廳叫號(hào)機(jī)程序 42
1.6 本章總結(jié) 43
第2章:深入理解Thread構(gòu)造函數(shù) 45
2.1 線程的命名 45
2.1.1 線程的默認(rèn)命名 45
2.1.2 命名線程 46
2.1.3 修改線程的名字 47
2.2 線程的父子關(guān)系 48
2.3 Thread與ThreadGroup 48
2.4 Thread與Runnable 50
2.5 Thread與JVM虛擬機(jī)棧 50
2.5.1 Thread與Stacksize 51
2.5.2 JVM內(nèi)存結(jié)構(gòu) 53
2.5.3 Thread與虛擬機(jī)棧 58
2.6 守護(hù)線程 62
2.6.1 什么是守護(hù)線程 62
2.6.2 守護(hù)線程的作用 64
2.7 本章總結(jié) 64
第3章:Thread API的詳細(xì)介紹 66
3.1 線程sleep 66
3.1.1 sleep方法介紹 66
3.1.2 使用TimeUnit替代Thread.sleep 67
3.2 線程yield 68
3.2.1 yield方法介紹 68
3.2.2 yield vs
sleep 69
3.3 設(shè)置線程的優(yōu)先級(jí) 69
3.3.1 線程優(yōu)先級(jí)介紹 70
3.3.2 線程優(yōu)先級(jí)源碼分析 71
3.3.3 關(guān)于優(yōu)先級(jí)的一些總結(jié) 72
3.4 獲取線程ID 73
3.5 獲取當(dāng)前線程 73
3.6 設(shè)置線程上下文類加載器 74
3.7 線程interrupt 75
3.7.1 interrupt 75
3.7.2
isInterrupted 77
3.7.3
interrupted 79
3.7.4 interrupt注意事項(xiàng) 81
3.8 線程join 82
3.8.1 線程join方法詳解 83
3.8.2 join方法結(jié)合實(shí)戰(zhàn) 85
3.9 如何關(guān)閉一個(gè)線程 90
3.9.1 正常關(guān)閉 90
3.9.2 異常退出 94
3.9.3 進(jìn)程假死 94
3.10 本章總結(jié) 95
第4章:線程安全與數(shù)據(jù)同步 97
4.1 數(shù)據(jù)同步 97
4.1.1 數(shù)據(jù)不一致問題的引入 97
4.1.2 數(shù)據(jù)不一致問題原因分析 99
4.2 初識(shí) synchronized關(guān)鍵字 101
4.2.1 什么是synchronized 102
4.2.2
synchronized關(guān)鍵字的用法 103
4.3 深入synchronized關(guān)鍵字 105
4.3.1 線程堆棧分析 105
4.3.2 JVM指令分析 108
4.3.3 使用synchronized需要注意的問題 112
4.4 This Monitor和Class Monitor的詳細(xì)介紹 114
4.4.1 this
monitor 114
4.4.2 class
monitor 117
4.5 程序死鎖的原因以及如何診斷 120
4.5.1 程序死鎖 120
4.5.2 程序死鎖舉例 121
4.5.3 死鎖診斷 124
4.6 本章總結(jié) 126
第5章:線程間通信 127
5.1 同步阻塞與異步非阻塞 127
5.1.1 同步阻塞消息處理 127
5.1.2 異步非阻塞消息處理 128
5.2 單線程間通信 129
5.2.1 初識(shí)wait和notify 129
5.2.2 wait和notify方法詳解 133
5.2.3 wait和notify注意事項(xiàng) 135
5.2.4 wait vs
sleep 137
5.3 多線程間通信 137
5.3.1 生產(chǎn)者消費(fèi)者 137
5.3.2 線程休息室wait set 140
5.4 自定義顯式鎖BooleanLock 141
5.4.1
synchronized關(guān)鍵字的缺陷 142
5.4.2 顯式鎖BooleanLock 143
5.5 本章總結(jié) 153
第6章:ThreadGroup詳細(xì)講解 155
6.1 ThreadGroup與Thread 155
6.2 創(chuàng)建Thread Group 155
6.3 拷貝Thread數(shù)組和ThreadGroup數(shù)組 157
6.3.1 拷貝Thread數(shù)組 157
6.3.2 拷貝ThreadGroup數(shù)組 159
6.4 ThreadGroup操作 160
6.4.1
ThreadGroup的基本操作 161
6.4.2
ThreadGroup的interrupt 164
6.4.3
ThreadGroup的destroy 166
6.4.4 守護(hù)ThreadGroup 168
6.5 本章總結(jié) 169
第7章:Hook線程以及捕獲線程執(zhí)行異常 170
7.1 獲取線程運(yùn)行時(shí)異常 170
7.1.1
UncaughtExceptionHandler介紹 170
7.1.2
UncaughtExceptionHandler實(shí)例 171
7.1.3
UncaughtExceptionHandler源碼分析 173
7.2 注入鉤子線程(Hook) 175
7.2.1 Hook線程介紹 175
7.2.2 Hook線程實(shí)戰(zhàn) 177
7.2.3 Hook線程應(yīng)用場(chǎng)景以及注意事項(xiàng) 179
7.3 本章總結(jié) 179
第8章:線程池原理以及自定義線程池 180
8.1 線程池原理 180
8.2 線程池實(shí)現(xiàn) 181
8.2.1 線程池接口定義 182
8.2.2 線程池詳細(xì)實(shí)現(xiàn) 188
8.3 線程池應(yīng)用 198
8.4 本章總結(jié) 202
第二部分:Java ClassLoader 204
第9章 類的加載過程 205
9.1 類的加載過程介紹 205
9.2 類的主動(dòng)使用和被動(dòng)使用 206
9.3 類加載過程詳解 209
9.3.1 類的加載階段 210
9.3.2 類的連接階段 212
9.3.3 類的初始化階段 219
9.4 本章總結(jié) 221
第10章 JVM類加載器 224
10.1 JVM內(nèi)置三大類加載器 224
10.1.1 根類加載器介紹 225
10.1.2 擴(kuò)展類加載器介紹 226
10.1.3 系統(tǒng)類加載器介紹 227
10.2 自定義類加載器 227
10.2.1 自定義類加載器,問候世界 228
10.2.2 雙親委托機(jī)制詳細(xì)介紹 233
10.2.3 破壞雙親委托機(jī)制 236
10.2.4 類加載器命名空間,運(yùn)行時(shí)包,類的卸載等 239
10.3 本章總結(jié) 246
第11章 線程上下文類加載器 249
11.1 為什么需要線程上下文類加載器 249
11.2 數(shù)據(jù)庫驅(qū)動(dòng)的初始化源碼分析 250
第三部分
深入理解volatile關(guān)鍵字 254
第12章 volatile關(guān)鍵字的介紹 255
12.1 初識(shí)volatile關(guān)鍵字 255
12.2 機(jī)器硬件CPU 257
12.3 Java 內(nèi)存模型 262
第13章 深入volatile關(guān)鍵字 265
13.1 并發(fā)編程的三個(gè)重要特性 265
13.1.1 原子性 265
13.1.2 可見性 266
13.1.3 有序性 266
13.2 JMM如何保證三大特性 268
13.2.1 JMM與原子性 269
13.2.2 JMM與可見性 271
13.2.3 JMM與有序性 272
13.3 volatile關(guān)鍵字深入解析 273
13.3.1 volatile關(guān)鍵字的語義 274
13.3.2 volatile的原理和實(shí)現(xiàn)機(jī)制 277
13.3.3 volatile的使用場(chǎng)景 278
13.3.4 volatile
vs synchronized 280
第15章 7種單例設(shè)計(jì)模式的設(shè)計(jì) 282
14.1 餓漢式 282
14.2 懶漢式 283
14.3 懶漢式 同步方法 284
14.4
Double-Check 285
14.5
Volatile Double-Check 288
14.6 Holder方式 288
14.7枚舉方式 289
14.8本章總結(jié) 291
第四部分
多線程設(shè)計(jì)架構(gòu)模式 292
第15章 監(jiān)控任務(wù)的生命周期 296
15.1 場(chǎng)景描述 296
15.2 當(dāng)觀察者模式遇到Thread 296
15.2.1 接口定義 296
15.2.2
ObservableThread實(shí)現(xiàn) 300
15.3 測(cè)試及技巧總結(jié) 303
15.3.1 測(cè)試運(yùn)行 303
15.3.2 關(guān)鍵點(diǎn)總結(jié) 304
第16章 Single
Thread Execution設(shè)計(jì)模式 305
16.1 機(jī)場(chǎng)過安檢 305
16.1.1 非線程安全 305
16.1.2 問題分析 308
16.1.3 線程安全 310
16.2 吃面問題 311
16.2.1 吃面引起的死鎖 312
16.2.2 解決吃面引起的死鎖問題 314
16.2.3 哲學(xué)家吃面 316
16.3 本章總結(jié) 317
第17章 讀寫鎖分離設(shè)計(jì)模式 318
17.1 場(chǎng)景描述 318
17.2 讀寫分離程序設(shè)計(jì) 318
17.2.1 接口定義 318
17.2.2 程序?qū)崿F(xiàn) 321
17.3 讀寫鎖的使用 328
17.4 關(guān)于更多讀寫鎖的話題 332
第18章 不可變對(duì)象設(shè)計(jì)模式 334
18.1 線程安全性 334
18.2 不可變對(duì)象的設(shè)計(jì) 334
18.2.1 非線程安全的累加器 335
18.2.2 方法同步增加線程安全性 338
18.2.3 不可變的累加器對(duì)象設(shè)計(jì) 339
18.3 技巧總結(jié) 341
第19章 Future設(shè)計(jì)模式 342
19.1 先給你一張憑據(jù) 342
19.2 Future設(shè)計(jì)模式實(shí)現(xiàn) 342
19.2.1 接口定義 343
19.2.2 程序?qū)崿F(xiàn) 344
19.3 Future的使用以及技巧總結(jié) 347
19.4 增強(qiáng)FutureService使其支持回調(diào) 349
19.5 本章總結(jié) 351
第20章 Guarded
Suspension 設(shè)計(jì)模式 352
20.1 什么是Guarded Suspension設(shè)計(jì)模式 352
20.2 Guarded
Suspension示例 352
第21章 線程上下文設(shè)計(jì)模式 355
21.1 什么是上下文 355
21.2 線程上下文設(shè)計(jì) 356
21.3 ThreadLocal詳解 358
21.3.1
ThreadLocal的使用場(chǎng)景及注意事項(xiàng) 358
21.3.2
ThreadLocal的方法詳解及源碼分析 359
21.3.3
ThreadLocal的內(nèi)存泄漏問題分析 365
21.4 使用ThreadLocal設(shè)計(jì)線程上下文 370
第22章 Balking設(shè)計(jì)模式 373
22.1 什么是Balking設(shè)計(jì) 373
22.2 Balking模式之文檔編輯 374
22.2.1 Document 374
22.2.2
AutoSaveThread 377
22.2.3
DocumentEditThread 378
22.3 本章總結(jié) 380
第23章 Latch設(shè)計(jì)模式 381
23.1 什么是Latch 381
23.2
CountDownLatch程序?qū)崿F(xiàn) 382
23.2.1 無限等待的Latch 382
23.2.2 有超時(shí)設(shè)置的Latch 387
23.3 Latch設(shè)計(jì)模式總結(jié) 389
第24章
Thread-Per-Message設(shè)計(jì)模式 392
24.1 什么是Thread-Per-Message 392
24.2 每個(gè)任務(wù)一個(gè)線程 392
24.3 多用戶的網(wǎng)絡(luò)聊天 395
24.3.1 服務(wù)端程序 396
24.3.2 響應(yīng)客戶端連接的Handler 397
24.3.3 聊天程序測(cè)試 400
24.4 本章總結(jié) 400
第25章 Two Phase
Termination設(shè)計(jì)模式 401
25.1 什么是Two Phase Termination 401
25.2 Two Phase
Termination示例 402
25.2.1 線程停止的Two Phase Termination 402
25.2.2 進(jìn)程關(guān)閉的Two Phase Termination 404
25.3 知識(shí)擴(kuò)展 404
25.3.1 Strong
Reference(強(qiáng)引用)及LRUCache 405
25.3.2 Soft
Reference(軟引用)及SoftLRUCache 410
25.3.3 Weak
Reference(弱引用) 413
25.3.4 Phantom
Reference(幻影引用) 415
25.4 本章總結(jié) 418
第26章
Worker-Thread設(shè)計(jì)模式 419
26.1 什么是Worker-Thread模式 419
26.2
Worker-Thread模式實(shí)現(xiàn) 419
26.2.1 產(chǎn)品及組裝說明書 420
26.2.2 流水線傳送帶 421
26.2.3 流水線工人 423
26.3
Worker-Thread模式測(cè)試與總結(jié) 425
26.3.1 產(chǎn)品流水線測(cè)試 425
26.3.2
Worker-Thread vs Producer-Consumer 426
第27章 Active
Objects設(shè)計(jì)模式 428
27.1 接受異步消息的主動(dòng)對(duì)象 428
27.2 標(biāo)準(zhǔn)Active Objects模式設(shè)計(jì) 428
27.2.1
OrderService接口設(shè)計(jì) 430
27.2.2
OrderServiceImpl 詳解 431
27.2.3
OrderServiceProxy詳解 432
27.2.4
MethodMessage 434
27.2.5
ActiveMessageQueue 437
27.2.6
OrderServiceFactory及測(cè)試 439
27.3 通用Active Objects框架設(shè)計(jì) 441
27.3.1
ActiveMessage詳解 442
27.3.2
@ActiveMethod 445
27.3.3
ActiveServiceFactory詳解 446
27.3.4
ActiveMessageQueue及其它 449
27.4 Active
Objects總結(jié) 451
第28章 Event Bus(消息總線)設(shè)計(jì)模式 452
28.1 Event Bus設(shè)計(jì) 452
28.1.1 Bus接口詳解 453
28.1.2 同步EventBus詳解 455
28.1.3 異步EventBus詳解 458
28.1.4
Subscriber注冊(cè)表Registry詳解 459
28.1.5 Event廣播Dispatcher詳解 462
28.1.6其它類接口設(shè)計(jì) 466
28.1.7 Event Bus測(cè)試 468
28.2 Event Bus實(shí)戰(zhàn)--監(jiān)控目錄變化 470
28.2.1
WatchService遇到EventBus 471
28.2.2
FileChangeEvent 473
28.2.3 監(jiān)控目錄變化 473
28.3 EventBus總結(jié) 475
第29章 Event
Driven(事件驅(qū)動(dòng)) 設(shè)計(jì)模式 476
29.1 Event-Driven
Architecture基礎(chǔ) 476
29.1.1 Events 476
29.1.2 Event
Handlers 477
29.1.3 Event
Loop 478
29.2 開發(fā)一個(gè)Event-Driven 框架 480
29.2.1 同步EDA框架設(shè)計(jì) 480
29.2.2 異步EDA框架設(shè)計(jì) 487
29.3
Event-Driven的使用 492
29.3.1 Chat
Event 492
29.3.2 Chat
Channel(Handler) 494
29.3.3 Chat User線程 495
29.4 本章總結(jié) 498