注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)Java并發(fā)編程深度解析與實(shí)戰(zhàn)

Java并發(fā)編程深度解析與實(shí)戰(zhàn)

Java并發(fā)編程深度解析與實(shí)戰(zhàn)

定 價(jià):¥118.00

作 者: 譚鋒(Mic) 著
出版社: 電子工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

ISBN: 9787121421365 出版時(shí)間: 2021-10-01 包裝: 平裝
開本: 16開 頁數(shù): 508 字?jǐn)?shù):  

內(nèi)容簡介

  本書涵蓋Java并發(fā)編程體系的核心庫和核心類的使用及原理分析,具體包括線程、synchronized、volatile、J.U.C中的重入鎖和讀寫鎖、并發(fā)中的條件等待機(jī)制、J.U.C并發(fā)工具集、深度探索并發(fā)編程不得不知的工具、阻塞隊(duì)列、并發(fā)安全集合、線程池、異步編程特性等。書中針對(duì)每一個(gè)技術(shù)點(diǎn),縱向分析與其相關(guān)的所有內(nèi)容,并且對(duì)相關(guān)知識(shí)點(diǎn)進(jìn)行了非常詳細(xì)的說明,同時(shí)從架構(gòu)實(shí)踐的角度來看待并發(fā),通過大量實(shí)戰(zhàn)案例讓讀者理解各類技術(shù)在實(shí)際應(yīng)用中的使用方法。 作者花費(fèi)了4年時(shí)間,投入了大量精力對(duì)并發(fā)編程領(lǐng)域進(jìn)行了深入的研究,將自己13年的Java開發(fā)及架構(gòu)經(jīng)驗(yàn)融入了書中,對(duì)各位讀者來說,這應(yīng)該是一本非常值得閱讀的圖書。

作者簡介

  譚鋒(Mic) 咕泡學(xué)院聯(lián)合創(chuàng)始人,2017年開始創(chuàng)業(yè),至今4年多時(shí)間。擁有13年Java開發(fā)及架構(gòu)經(jīng)驗(yàn),其中有4年授課經(jīng)驗(yàn),培養(yǎng)了近3W+學(xué)員,學(xué)員遍布一二線主流互聯(lián)網(wǎng)企業(yè)。 曾就職于中國電信、平安支付、挖財(cái)?shù)裙緭?dān)任業(yè)務(wù)架構(gòu)師,在平安支付主導(dǎo)基于Dubbo的服務(wù)化架構(gòu)設(shè)計(jì)和落地,在上海挖財(cái)推動(dòng)基于Spring Boot微服務(wù)化架構(gòu)的改造。 因此對(duì)于微服務(wù)架構(gòu)、高并發(fā)架構(gòu)有非常豐富的實(shí)踐經(jīng)驗(yàn)和深度研究。目前擔(dān)任教學(xué)總監(jiān)一職,負(fù)責(zé)微服務(wù)高并發(fā)領(lǐng)域的課程研發(fā)和設(shè)計(jì)。

圖書目錄

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

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)