第1章Java線程的實踐及原理揭秘
1.1如何理解繫統並發
1.2繫統如何支撐高並發
1.3線程的前世今生
1.3.1大白話理解進程和線程
1.3.2線程的核心價值
1.3.3如何理解並發和並行
1.4在Java中如何使用多線程
1.4.1實現Runnable接口創建線程
1.4.2繼承Thread類創建線程
1.4.3實現Callable接口並創建帶返回值的線程
1.5多線程如何應用到實際場景
1.5.1ServerSocket
1.5.2SocketThread
1.6多線程的基本原理
1.7線程的運行狀態
1.7.1線程運行狀態演示
1.7.2線程運行狀態流轉圖
1.8如何正確終止線程
1.8.1關於安全中斷線程的思考
1.8.2安全中斷線程之interrupt
1.8.3如何中斷處於阻塞狀態下的線程
1.8.4interrupt()方法的實現原理
1.9理解上下文切換帶來的性能影響
1.9.1上下文切換帶來的問題
1.9.2什麼是上下文切換
1.9.3如何減少上下文切換
1.10揭秘守護線程
1.10.1守護線程的應用場景
1.10.2守護線程使用注意事項
1.11快速定位並解決線程導致的生產問題
1.11.1死鎖導致請求無法響應
1.11.2CPU占用率很高,響應很慢
1.12本章小結
第2章深度揭秘synchronized實現原理
2.1揭秘多線程環境下的原子性問題
2.1.1深入分析原子性問題的本質
2.1.2關於原子性問題的解決辦法
2.2Java中的synchronized同步鎖
2.2.1synchronized的使用方法
2.2.2了解synchronized同步鎖的作用範圍
2.3關於synchronized同步鎖的思考
2.4synchronzied同步鎖標記存儲分析
2.4.1揭秘Mark Word的存儲結構
2.4.2圖解分析對像的實際存儲
2.4.3通過ClassLayout查看對像內存布局
2.4.4Hotspot虛擬機中對像存儲的源碼
2.5synchronized的鎖類型
2.5.1偏向鎖的原理分析
2.5.2輕量級鎖的原理分析
2.5.3重量級鎖的原理分析
2.6關於CAS機制的實現原理分析
2.6.1CAS在AtomicInteger中的應用
2.6.2CAS實現自旋鎖
2.6.3CAS在JVM中的實現原理分析
2.7鎖升級的實現流程
2.7.1偏向鎖的實現原理
2.7.2輕量級鎖的實現原理
2.7.3重量級鎖的實現原理
2.8synchronized使用不當帶來的死鎖問題
2.8.1死鎖的案例分析
2.8.2死鎖產生的必要條件
2.8.3如何解決死鎖問題
2.9本章小結
第3章volatile為什麼能解決可見性和有序性問題
3.1關於線程的可見性問題分析
3.1.1思考導致問題的原因
3.1.2volatile關鍵字解決可見性問題
3.2深度理解可見性問題的本質
3.2.1如何化提升CPU利用率
3.2.2詳述CPU高速緩存
3.2.3CPU緩存一致性問題
3.2.4總結可見性問題的本質
3.3volatile如何解決可見性問題
3.4指令重排序導致的可見性問題
3.4.1什麼是指令重排序
3.4.2as-if-serial語義
3.5從CPU層面深度剖析指令重排序的本質
3.5.1CPU優化—Store Buffers
3.5.2CPU優化—Store Forwarding
3.5.3CPU優化—Invalidate Queues
3.6通過內存屏障解決內存繫統重排序問題
3.6.1內存屏障詳解
3.6.2通過內存屏障防止重排序
3.6.3不同CPU的重排序規則
3.6.4總結CPU層面的可見性問題
3.7Java Memory Mode
3.7.1從JVM和硬件層面理解Java Memory Mode
3.7.2JVM提供的內存屏障指令
3.8揭秘volatile實現原理
3.9Happens-Before模型
3.9.1程序順序規則
3.9.2傳遞性規則
3.9.3volatile變量規則
3.9.4監視器鎖規則
3.9.5 start規則
3.9.6join規則
3.10本章小結
第4章深入淺出分析J.U.C中的重入鎖和讀寫鎖
4.1J.U.C中與鎖相關的API
4.1.1ReentrantLock的基本應用
4.1.2ReentrantReadWriteLock的基本應用
4.1.3StampedLock的基本應用
4.2ReentrantLock的設計猜想
4.2.1鎖的互斥,必須要競爭同一個共享變量
4.2.2沒有競爭到鎖的線程,需要阻塞
4.2.3需要一個容器存儲被阻塞的線程
4.3ReentrantLock實現原理分析
4.4AbstractQueuedSynchronizer
4.5ReentrantLock源碼分析
4.5.1ReentrantLock.lock()方法
4.5.2AbstractQueuedSynchronizer.acquire()方法
4.5.3 NonfairSync.tryAcquire()方法
4.5.4ReentrantLock.nofairTryAcquire()方法
4.5.5AbstractQueuedSynchronizer.addWaiter()方法
4.5.6AQS.acquireQueued()方法
4.6ReentrantLock釋放鎖源碼分析
4.6.1ReentrantLock.tryRelease()方法
4.6.2unparkSuccessor()方法
4.6.3釋放鎖的線程繼續執行
4.7分析ReentrantReadWriteLock類的原理
4.7.1WriteLock鎖競爭原理
4.7.2ReadLock鎖競爭原理
4.7.3ReentrantReadWriteLock中的鎖降級
4.8StampedLock的原理分析
4.8.1核心內部類分析
4.8.2StampedLock原理圖解
4.8.3StampedLock鎖升級
4.9本章小結
第5章從線程通信來窺探並發中的條件等待機制
5.1wait/notify
5.1.1wait()/notify()方法使用實戰
5.1.2圖解生產者/消費者
5.1.3wait()/notify()方法的原理
5.1.4wait()/notify()方法為什麼要加同步鎖
5.2通過Thread.join獲取線程執行結果
5.2.1Thread.join()方法的執行流程
5.2.2Thread.join()方法的實現原理
5.3J.U.C中的條件控制Condition
5.3.1Condition的基本應用
5.3.2基於Condition的手寫阻塞隊列
5.4Condition的設計猜想
5.5 Condition的源碼分析
5.5.1Condition.await()方法
5.5.2Condition.signal()方法
5.5.3鎖競爭成功後的執行流程
5.6本章小結
第6章J.U.C並發工具集實戰及原理分析
6.1CountDownLatch簡單介紹
6.1.1CountDownLatch的基本使用
6.1.2 CountDownLatch運行流程
6.1.3如何落地到實際應用
6.1.4CountDownLatch的其他用法
6.2CountDownLatch底層原理
6.2.1讓線程等待的await()方法到底做了什麼
6.2.2深入分析countDown()方法源碼
6.2.3線程被喚醒後的執行邏輯
6.3Semaphore
6.3.1Semaphore使用案例
6.3.2Semaphore方法及場景說明
6.4Semaphore原理分析
6.4.1Semaphore令牌獲取過程分析
6.4.2Semaphore令牌釋放過程分析
6.5CyclicBarrier
6.5.1CyclicBarrier的基本使用
6.5.2基本原理分析
6.6CyclicBarrier實現原理及源碼
6.6.1await()方法
6.6.2reset()方法
6.7本章小結
第7章深度探索並發編程不得不知的工具
7.1初步認識ThreadLocal
7.2ThreadLocal的應用場景分析
7.3ThreadLocal解決SimpleDateFormat線程安全問題
7.3.1 SimpleDateFormat線程安全問題的原理
7.3.2ThreadLocal實現線程安全性
7.4ThreadLocal實現原理分析
7.4.1set()方法源碼分析
7.4.2get()方法源碼分析
7.4.3ThreadLocal內存洩漏
7.5任務拆分與聚合Fork/Join
7.5.1 Fork/Join的核心API說明
7.5.2Fork/Join的基本使用
7.6 Fork/Join的實現原理
7.6.1 WorkQueue的原理
7.6.2 工作竊取算法
7.7Fork/Join的核心源碼分析
7.7.1 任務提交過程詳解
7.7.2喚醒或者創建工作線程
7.7.3工作線程和工作隊列的綁定
7.7.4ForkJoinWorkerThread運行過程
7.8 使用Fork/Join解決實際問題
7.8.1項目結構說明
7.8.2ILoadDataProcessor
7.8.3 AbstractLoadDataProcessor
7.8.4業務服務類
7.8.5Item聚合任務服務
7.8.6 ComplexTradeTaskService
7.8.7 測試代碼
7.9本章小結
第8章深度剖析阻塞隊列的設計原理及實現
8.1什麼是阻塞隊列
8.2Java中提供的阻塞隊列
8.3阻塞隊列中提供的方法
8.4阻塞隊列的使用
8.4.1生產者/消費者模型代碼
8.4.2圖解阻塞隊列實現原理
8.5 阻塞隊列應用實戰
8.5.1基於阻塞隊列的責任鏈源碼
8.5.2阻塞隊列實戰場景總結
8.6詳解J.U.C中阻塞隊列的使用
8.6.1基於數組結構的阻塞隊列ArrayBlockingQueue
8.6.2基於鏈表的阻塞隊列LinkedBlockingQueue
8.6.3優先級阻塞隊列PriorityBlockingQueue
8.6.4延遲阻塞隊列DelayQueue
8.6.5無存儲結構的阻塞隊列SynchronousQueue
8.6.6阻塞隊列結合體LinkedTransferQueue
8.6.7雙向阻塞隊列LinkedBlockingDeque
8.7阻塞隊列的實現原理
8.7.1put()方法說明
8.7.2take()方法說明
8.8本章小結
第9章深度解讀並發安全集合的原理及源碼
9.1並發安全集合ConcurrentHashMap
9.2正確理解ConcurrentHashMap的線程安全性
9.2.1computeIfAbsent()方法詳解
9.2.2computeIfPresent()方法詳解
9.2.3compute()方法詳解
9.2.4merge()方法詳解
9.3ConcurrentHashMap的數據結構
9.3.1ConcurrentHashMap數據存儲相關定義
9.3.2Node數組初始化過程分析
9.3.3單節點到鏈表的轉化過程分析
9.3.4擴容還是轉化為紅黑樹
9.4深度分析ConcurrentHashMap中的並發擴容機制
9.4.1多線程並發擴容原理圖解
9.4.2詳解ConcurrentHashMap中的數據遷移
9.5分段鎖設計提素數量的性能
9.5.1size計數的基本原理分析
9.5.2addCount()方法詳解
9.5.3fullAddCount()方法分析
9.6詳解紅黑樹的實現原理
9.6.1什麼是紅黑樹
9.6.2紅黑樹的平衡規則
9.6.3紅黑樹的平衡場景規則說明
9.6.4紅黑素平衡圖解
9.6.5 紅黑樹規則實戰解析
9.6.6紅黑樹素的平衡規則
9.7ConcurrentHashMap中紅黑樹的使用
9.7.1 TreeBin的基本介紹
9.7.2 鏈表轉化成紅黑樹
9.7.3自平衡
9.7.4ConcurrentHashMap總結
9.8Java中其他並發安全集合
9.8.1ConcurrentLinkedQueue
9.8.2ConcurrentLinkedDeque
9.8.3ConcurrentSkipListMap
9.9深度分析數據結構:跳表
9.9.1什麼是跳表
9.9.2跳表的特性
9.9.3跳表的基本操作
9.10本章小結
第10章站在架構的角度思考線程池的設計及原理
10.1線程池的優勢
10.2Java中提供的線程池
10.2.1線程池的使用
10.2.2ThreadPoolExecutor
10.3Executor框架詳解
10.4線程池的設計猜想
10.4.1線程池的需求分析
10.4.2生產者/消費者模型的設計
10.4.3任務拒絕策略
10.4.4非核心線程的回收
10.4.5線程池設計總結
10.5從實現原理了解線程池
10.6線程池核心源碼剖析
10.6.1線程狀態和數量存儲
10.6.2線程池的狀態機及變更
10.6.3從execute()方法分析線程池源碼
10.7合理設置線程池參數
10.7.1線程池大小的合理設置
10.7.2動態設置線程池參數
10.8線程池的監控
10.8.1線程池監控的基本原理
10.8.2在Spring Boot應用中發布線程池信息
10.9本章小結
第11章Java並發編程中的異步編程特性
11.1了解Future/Callable
11.2 Future/Callable的實現原理
11.2.1FutureTask的核心屬性
11.2.2FutureTask.run()
11.2.3FutureTask.get()
11.2.4finishCompletion()
11.3Java 8新特性之CompletableFuture
11.3.1CompletableFuture類關繫圖
11.3.2CompletableFuture方法說明
11.3.3主動獲取執行結果
11.4CompletionStage方法及作用說明
11.4.1方法分類概述
11.4.2CompletionStage異常處理方法
11.4.3方法類型總結
11.5CompletableFuture綜合實戰
11.5.1商品實體對像
11.5.2模擬微服務請求實現類
11.5.3Web請求
11.6CompletableFuture實現原理分析
11.6.1Completion說明
11.6.2圖解Completion的棧結構
11.7核心源碼分析
11.7.1CompletableFuture靜態任務創建
11.7.2 Completion Stack構建
11.7.3簡述UniCompletion
11.7.4任務執行流程
11.7.5獲取任務執行結果
11.8本章小結