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

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

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

定 價:¥89.00

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

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

內(nèi)容簡介

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

作者簡介

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

圖書目錄

第1章 多線程基礎(chǔ)
1.1 線程的優(yōu)雅關(guān)閉
1.1.1 stop與destory函數(shù)
1.1.2 守護線程
1.1.3 設(shè)置關(guān)閉的標志位
1.2 InterruptedException與interrupt()函數(shù)
1.2.1 什么情況下會拋出Interrupted異常
1.2.2 輕量級阻塞與重量級阻塞
1.2.3 t.isInterrupted()與Thread.interrupted()的區(qū)別
1.3 synchronized關(guān)鍵字
1.3.1 鎖的對象是什么
1.3.2 鎖的本質(zhì)是什么
1.3.3 synchronized實現(xiàn)原理
1.4 wait與notify
1.4.1 生產(chǎn)者??消費者模型
1.4.2 為什么必須和synchronized一起使用
1.4.3 為什么wait()的時候必須釋放鎖
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 為什么會存在“內(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對volatile語義的增強
1.7 內(nèi)存屏障
1.7.1 Linux中的內(nèi)存屏障
1.7.2 JDK中的內(nèi)存屏障
1.7.3 volatile實現(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 一寫一讀的無鎖隊列:內(nèi)存屏障
1.9.2 一寫多讀的無鎖隊列:volatile關(guān)鍵字
1.9.3 多寫多讀的無鎖隊列: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 實現(xiàn)原理
2.6 Striped64與LongAdder
2.6.1 LongAdder原理
2.6.2 最終一致性
2.6.3 偽共享與緩存行填充
2.6.4 LongAdder核心實現(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 鎖實現(xiàn)的基本原理
3.1.5 公平與非公平的lock()實現(xiàn)差異
3.1.6 阻塞隊列與喚醒機制
3.1.7 unlock()實現(xiàn)分析
3.1.8 lockInterruptibly()實現(xiàn)分析
3.1.9 tryLock()實現(xiàn)分析
3.2 讀寫鎖
3.2.1 類繼承層次
3.2.2 讀寫鎖實現(xiàn)的基本原理
3.2.3 AQS的兩對模板方法
3.2.4 WriteLock公平vs.非公平實現(xiàn)
3.2.5 ReadLock公平vs.非公平實現(xiàn)
3.3 Condition
3.3.1 Condition與Lock的關(guān)系
3.3.2 Condition的使用場景
3.3.3 Condition實現(xiàn)原理
3.3.4 await()實現(xiàn)分析
3.3.5 awaitUninterruptibly()實現(xiàn)分析
3.3.6 notify()實現(xiàn)分析
3.4 StampedLock
3.4.1 為什么引入StampedLock
3.4.2 使用場景
3.4.3 “樂觀讀”的實現(xiàn)原理
3.4.4 悲觀讀/寫:“阻塞”與“自旋”策略實現(xiàn)差異

第4章 同步工具類
4.1 Semaphore
4.2 CountDownLatch
4.2.1 CountDownLatch使用場景
4.2.2 await()實現(xiàn)分析
4.2.3 countDown()實現(xiàn)分析
4.3 CyclicBarrier
4.3.1 CyclicBarrier使用場景
4.3.2 CyclicBarrier實現(xiàn)原理
4.4 Exchanger
4.4.1 Exchanger使用場景
4.4.2 Exchanger 實現(xiàn)原理
4.4.3 exchange(V x)實現(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中的實現(xiàn)方式
5.5.2 JDK 8中的實現(xiàn)方式
5.6 ConcurrentSkipListMap/Set
5.6.1 ConcurrentSkipListMap
5.6.2 ConcurrentSkipListSet

第6章 線程池與Future
6.1 線程池的實現(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 工作竊取隊列
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)與個數(shù)分析
7.5 Worker線程的阻塞-喚醒機制
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 鏈式的CompletableFuture:thenRun、thenAccept和thenApply
8.1.4 CompletableFuture的組合:thenCompose與thenCombine
8.1.5 任意個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í)行過程分析
8.4.4 thenApply與thenApplyAsync的區(qū)別
8.5 任務(wù)的網(wǎng)狀執(zhí)行:有向無環(huán)圖
8.6 allOf內(nèi)部的計算圖分析

本目錄推薦

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