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

Java并發(fā)實(shí)現(xiàn)原理:JDK源碼剖析

Java并發(fā)實(shí)現(xiàn)原理:JDK源碼剖析

定 價(jià):¥89.00

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

ISBN: 9787121379727 出版時(shí)間: 2020-04-01 包裝: 平裝
開本: 16開 頁數(shù): 256 字?jǐn)?shù):  

內(nèi)容簡介

  本書全面而系統(tǒng)地剖析了Java Concurrent包中的每一個(gè)部分,對(duì)并發(fā)的實(shí)現(xiàn)原理進(jìn)行了深入的探討。全書分為8章,第1章從基礎(chǔ)的多線程知識(shí)講起,厘清多線程中容易誤解的知識(shí)點(diǎn),探究背后的原理,包括內(nèi)存重排序、happen-before、內(nèi)存屏障等;第2~8章,從簡單到復(fù)雜,逐個(gè)剖析Concurrent包的每個(gè)部分,包括原子類、鎖、同步工具類、并發(fā)容器、線程池、ForkJoinPool和CompletableFuture。 本書適合有一定Java開發(fā)經(jīng)驗(yàn)的工程師、架構(gòu)師閱讀。通過閱讀本書,讀者可以對(duì)多線程編程形成一個(gè)“深刻而直觀”的認(rèn)識(shí),而不是僅僅停留在概念和理論層面。

作者簡介

  余春龍 中科院軟件所計(jì)算機(jī)碩士畢業(yè)。熱衷于高并發(fā)高可用架構(gòu)、業(yè)務(wù)建模、領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),在十年的工作中,經(jīng)歷過游戲、社交、廣告、電商等各種類型的項(xiàng)目,積累了較豐富的工程經(jīng)驗(yàn)。

圖書目錄

第1章 多線程基礎(chǔ)
1.1 線程的優(yōu)雅關(guān)閉
1.1.1 stop與destory函數(shù)
1.1.2 守護(hù)線程
1.1.3 設(shè)置關(guān)閉的標(biāo)志位
1.2 InterruptedException與interrupt()函數(shù)
1.2.1 什么情況下會(huì)拋出Interrupted異常
1.2.2 輕量級(jí)阻塞與重量級(jí)阻塞
1.2.3 t.isInterrupted()與Thread.interrupted()的區(qū)別
1.3 synchronized關(guān)鍵字
1.3.1 鎖的對(duì)象是什么
1.3.2 鎖的本質(zhì)是什么
1.3.3 synchronized實(shí)現(xiàn)原理
1.4 wait與notify
1.4.1 生產(chǎn)者??消費(fèi)者模型
1.4.2 為什么必須和synchronized一起使用
1.4.3 為什么wait()的時(shí)候必須釋放鎖
1.4.4 wait()與notify()的問題
1.5 volatile關(guān)鍵字
1.5.1 64位寫入的原子性(Half Write)
1.5.2 內(nèi)存可見性
1.5.3 重排序:DCL問題
1.6 JMM與happen-before
1.6.1 為什么會(huì)存在“內(nèi)存可見性”問題
1.6.2 重排序與內(nèi)存可見性的關(guān)系
1.6.3 as-if-serial語義
1.6.4 happen-before是什么
1.6.5 happen-before的傳遞性
1.6.6 C++中的volatile關(guān)鍵字
1.6.7 JSR-133對(duì)volatile語義的增強(qiáng)
1.7 內(nèi)存屏障
1.7.1 Linux中的內(nèi)存屏障
1.7.2 JDK中的內(nèi)存屏障
1.7.3 volatile實(shí)現(xiàn)原理
1.8 final關(guān)鍵字
1.8.1 構(gòu)造函數(shù)溢出問題
1.8.2 final的happen-before語義
1.8.3 happen-before規(guī)則總結(jié)
1.9 綜合應(yīng)用:無鎖編程
1.9.1 一寫一讀的無鎖隊(duì)列:內(nèi)存屏障
1.9.2 一寫多讀的無鎖隊(duì)列:volatile關(guān)鍵字
1.9.3 多寫多讀的無鎖隊(duì)列:CAS
1.9.4 無鎖棧
1.9.5 無鎖鏈表

第2章 Atomic類
2.1 AtomicInteger和AtomicLong
2.1.1 悲觀鎖與樂觀鎖
2.1.2 Unsafe 的CAS詳解
2.1.3 自旋與阻塞
2.2 AtomicBoolean和AtomicReference
2.2.1 為什么需要AtomicBoolean
2.2.2 如何支持boolean和double類型
2.3 AtomicStampedReference和AtomicMarkable Reference
2.3.1 ABA問題與解決辦法
2.3.2 為什么沒有AtomicStampedInteger或AtomictStampedLong
2.3.3 AtomicMarkableReference
2.4 AtomicIntegerFieldUpdater、AtomicLongFieldUpdater和AtomicReferenceField Updater
2.4.1 為什么需要AtomicXXXFieldUpdater
2.4.2 限制條件
2.5 AtomicIntegerArray、AtomicLongArray和AtomicReferenceArray
2.5.1 使用方式
2.5.2 實(shí)現(xiàn)原理
2.6 Striped64與LongAdder
2.6.1 LongAdder原理
2.6.2 最終一致性
2.6.3 偽共享與緩存行填充
2.6.4 LongAdder核心實(shí)現(xiàn)
2.6.5 LongAccumulator
2.6.6 DoubleAdder與DoubleAccumulator

第3章 Lock與Condition
3.1 互斥鎖
3.1.1 鎖的可重入性
3.1.2 類繼承層次
3.1.3 鎖的公平性vs.非公平性
3.1.4 鎖實(shí)現(xiàn)的基本原理
3.1.5 公平與非公平的lock()實(shí)現(xiàn)差異
3.1.6 阻塞隊(duì)列與喚醒機(jī)制
3.1.7 unlock()實(shí)現(xiàn)分析
3.1.8 lockInterruptibly()實(shí)現(xiàn)分析
3.1.9 tryLock()實(shí)現(xiàn)分析
3.2 讀寫鎖
3.2.1 類繼承層次
3.2.2 讀寫鎖實(shí)現(xiàn)的基本原理
3.2.3 AQS的兩對(duì)模板方法
3.2.4 WriteLock公平vs.非公平實(shí)現(xiàn)
3.2.5 ReadLock公平vs.非公平實(shí)現(xiàn)
3.3 Condition
3.3.1 Condition與Lock的關(guān)系
3.3.2 Condition的使用場景
3.3.3 Condition實(shí)現(xiàn)原理
3.3.4 await()實(shí)現(xiàn)分析
3.3.5 awaitUninterruptibly()實(shí)現(xiàn)分析
3.3.6 notify()實(shí)現(xiàn)分析
3.4 StampedLock
3.4.1 為什么引入StampedLock
3.4.2 使用場景
3.4.3 “樂觀讀”的實(shí)現(xiàn)原理
3.4.4 悲觀讀/寫:“阻塞”與“自旋”策略實(shí)現(xiàn)差異

第4章 同步工具類
4.1 Semaphore
4.2 CountDownLatch
4.2.1 CountDownLatch使用場景
4.2.2 await()實(shí)現(xiàn)分析
4.2.3 countDown()實(shí)現(xiàn)分析
4.3 CyclicBarrier
4.3.1 CyclicBarrier使用場景
4.3.2 CyclicBarrier實(shí)現(xiàn)原理
4.4 Exchanger
4.4.1 Exchanger使用場景
4.4.2 Exchanger 實(shí)現(xiàn)原理
4.4.3 exchange(V x)實(shí)現(xiàn)分析
4.5 Phaser
4.5.1 用Phaser替代CyclicBarrier和CountDownLatch
4.5.2 Phaser新特性
4.5.3 state變量解析
4.5.4 阻塞與喚醒(Treiber Stack)
4.5.5 arrive()函數(shù)分析
4.5.6 awaitAdvance()函數(shù)分析

第5章 并發(fā)容器
5.1 BlockingQueue
5.1.1 ArrayBlockingQueue
5.1.2 LinkedBlockingQueue
5.1.3 PriorityBlockingQueue
5.1.4 DelayQueue
5.1.5 SynchronousQueue
5.2 BlockingDeque
5.3 CopyOnWrite
5.3.1 CopyOnWriteArrayList
5.3.2 CopyOnWriteArraySet
5.4 ConcurrentLinkedQueue/ Deque
5.5 ConcurrentHashMap
5.5.1 JDK 7中的實(shí)現(xiàn)方式
5.5.2 JDK 8中的實(shí)現(xiàn)方式
5.6 ConcurrentSkipListMap/Set
5.6.1 ConcurrentSkipListMap
5.6.2 ConcurrentSkipListSet

第6章 線程池與Future
6.1 線程池的實(shí)現(xiàn)原理
6.2 線程池的類繼承體系
6.3 ThreadPoolExecutor
6.3.1 核心數(shù)據(jù)結(jié)構(gòu)
6.3.2 核心配置參數(shù)解釋
6.3.3 線程池的優(yōu)雅關(guān)閉
6.3.4 任務(wù)的提交過程分析
6.3.5 任務(wù)的執(zhí)行過程分析
6.3.6 線程池的4種拒絕策略
6.4 Callable與Future
6.5 ScheduledThreadPool Executor
6.5.1 延遲執(zhí)行和周期性執(zhí)行的原理
6.5.2 延遲執(zhí)行
6.5.3 周期性執(zhí)行
6.6 Executors工具類

第7章 ForkJoinPool
7.1 ForkJoinPool用法
7.2 核心數(shù)據(jù)結(jié)構(gòu)
7.3 工作竊取隊(duì)列
7.4 ForkJoinPool狀態(tài)控制
7.4.1 狀態(tài)變量ctl解析
7.4.2 阻塞棧Treiber Stack
7.4.3 ctl變量的初始值
7.4.4 ForkJoinWorkerThread狀態(tài)與個(gè)數(shù)分析
7.5 Worker線程的阻塞-喚醒機(jī)制
7.5.1 阻塞–入棧
7.5.2 喚醒–出棧
7.6 任務(wù)的提交過程分析
7.6.1 內(nèi)部提交任務(wù)pushTask
7.6.2 外部提交任務(wù)addSubmission
7.7 工作竊取算法:任務(wù)的執(zhí)行過程分析
7.7.1 順序鎖 SeqLock
7.7.2 scanGuard解析
7.8 ForkJoinTask的fork/join
7.8.1 fork
7.8.2 join的層層嵌套
7.9 ForkJoinPool的優(yōu)雅關(guān)閉
7.9.1 關(guān)鍵的terminate變量
7.9.2 shutdown()與shutdownNow()的區(qū)別

第8章 CompletableFuture
8.1 CompletableFuture用法
8.1.1 最簡單的用法
8.1.2 提交任務(wù):runAsync與supplyAsync
8.1.3 鏈?zhǔn)降腃ompletableFuture:thenRun、thenAccept和thenApply
8.1.4 CompletableFuture的組合:thenCompose與thenCombine
8.1.5 任意個(gè)CompletableFuture的組合
8.2 四種任務(wù)原型
8.3 CompletionStage接口
8.4 CompletableFuture內(nèi)部原理
8.4.1 CompletableFuture的構(gòu)造:ForkJoinPool
8.4.2 任務(wù)類型的適配
8.4.3 任務(wù)的鏈?zhǔn)綀?zhí)行過程分析
8.4.4 thenApply與thenApplyAsync的區(qū)別
8.5 任務(wù)的網(wǎng)狀執(zhí)行:有向無環(huán)圖
8.6 allOf內(nèi)部的計(jì)算圖分析

本目錄推薦

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