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

Java并發(fā)編程的藝術(shù)(第2版)

Java并發(fā)編程的藝術(shù)(第2版)

定 價(jià):¥109.00

作 者: 方騰飛 魏鵬 程曉明
出版社: 機(jī)械工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

ISBN: 9787111737971 出版時(shí)間: 2023-12-01 包裝: 平裝-膠訂
開本: 16開 頁數(shù): 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  內(nèi)容簡(jiǎn)介本書是Java并發(fā)編程領(lǐng)域公認(rèn)的標(biāo)準(zhǔn)性著作,第1版自2015年出版以來,累計(jì)印刷23次,銷售超過10萬冊(cè),全網(wǎng)讀者評(píng)論超過40000條,口碑爆棚。第2版在第1版的良好基礎(chǔ)上,與時(shí)具進(jìn),反映了Java技術(shù)的最新發(fā)展;去蕪存菁:處理了廣大讀者反饋的問題;博采眾長:吸收了行業(yè)專家的寶貴建議;厚積薄發(fā),融入了作者近8年在Java并發(fā)編程方面積累的新技術(shù)和新經(jīng)驗(yàn)。新增和修訂的內(nèi)容超過50%,無論是理論、方法還是實(shí)踐,都有了大幅度的提升。本書從并發(fā)編程的底層實(shí)現(xiàn)機(jī)制入手,圍繞JDK源碼、JVM、CPU等多角度詳細(xì)介紹了設(shè)計(jì)Java并發(fā)程序的框架、原理、核心技術(shù)、設(shè)計(jì)模式與應(yīng)用,同時(shí)輔以豐富的示例代碼,使得開發(fā)人員能夠更快地領(lǐng)悟Java并發(fā)編程的要領(lǐng),利用Java平臺(tái)的基礎(chǔ)并發(fā)功能快速地構(gòu)建大規(guī)模的并發(fā)應(yīng)用。本書具體包含如下核心內(nèi)容:?Java并發(fā)編程的基礎(chǔ):線程。?Java并發(fā)編程的挑戰(zhàn)及其解決思路。?Java 并發(fā)編程的底層實(shí)現(xiàn)原理,在CPU和JVM層面如何實(shí)現(xiàn)并發(fā)編程。 ?Java 的內(nèi)存模型。?Java 并發(fā)包中與鎖相關(guān)的API和組件,以及它們的使用方式與實(shí)現(xiàn)細(xì)節(jié)。?Java 中并發(fā)容器的實(shí)現(xiàn)原理,領(lǐng)略大師的設(shè)計(jì)技巧。 ?Java 中的原子操作類和并發(fā)工具類。?Java 中的線程池實(shí)現(xiàn)原理和使用建議。 ?Executor 框架的整體結(jié)構(gòu)和成員組件。 ?并發(fā)編程的實(shí)戰(zhàn)案例,以及排查并發(fā)編程問題的方法。 ?分布式編程的原則、范式以及常見分布式協(xié)議。 ?分布式鎖以及如何在分布式環(huán)境下進(jìn)行并發(fā)控制。 ?常見的分布式系統(tǒng)架構(gòu),以及多個(gè)場(chǎng)景的分布式架構(gòu)方案。此外,本書還是一本關(guān)于如何高效地進(jìn)行分布式編程的實(shí)踐指南,提供了很多實(shí)用的分布式編程技巧和工具,讓讀者更好地應(yīng)對(duì)分布式編程挑戰(zhàn),掌握J(rèn)ava生態(tài)在分布式領(lǐng)域的新編程范式。

作者簡(jiǎn)介

  方騰飛(花名:清英;英文名:kiral)螞蟻集團(tuán)高級(jí)技術(shù)專家,目前在信貸事業(yè)群負(fù)責(zé)花唄分期技術(shù)。15年以上Java研發(fā)經(jīng)驗(yàn),擁有8年以上團(tuán)隊(duì)管理經(jīng)驗(yàn),9年互聯(lián)網(wǎng)金融研發(fā)經(jīng)驗(yàn),先后負(fù)責(zé)過小微融資、供應(yīng)鏈金融和消費(fèi)信貸等技術(shù)研發(fā)項(xiàng)目。利用業(yè)余時(shí)間創(chuàng)辦了并發(fā)編程網(wǎng)(ifeve.com)和微信公眾號(hào)ifeves,組織發(fā)表并翻譯了數(shù)百篇優(yōu)秀技術(shù)文章。魏鵬阿里巴巴集團(tuán)原高級(jí)技術(shù)專家,曾擔(dān)任新零售業(yè)務(wù)和中間件架構(gòu)師,主導(dǎo)交易系統(tǒng)服務(wù)化工作。從事(后負(fù)責(zé))Java應(yīng)用容器Pandora和服務(wù)框架HSF的相關(guān)工作,其中Java應(yīng)用容器Pandora是阿里巴巴中間件運(yùn)行的基礎(chǔ),而服務(wù)框架HSF則是阿里巴巴集團(tuán)實(shí)現(xiàn)服務(wù)化的主要解決方案,二者在阿里巴巴擁有最為廣泛的使用量。個(gè)人平時(shí)喜歡閱讀技術(shù)書籍,翻譯一些國外優(yōu)秀文檔,愛總結(jié),喜分享,對(duì)Java應(yīng)用容器、多線程編程、微服務(wù)架構(gòu)以及分布式系統(tǒng)感興趣。程曉明互聯(lián)網(wǎng)公司資深架構(gòu)師,目前從事大數(shù)據(jù)和基礎(chǔ)架構(gòu)方面的架構(gòu)和開發(fā)工作。曾經(jīng)從事過互聯(lián)網(wǎng)電商的自研消息中間件開發(fā),互聯(lián)網(wǎng)電商的交易平臺(tái)開發(fā),JavaEE應(yīng)用服務(wù)器開發(fā)等工作。技術(shù)方面比較關(guān)注并發(fā)編程與分布式系統(tǒng),曾在InfoQ發(fā)表過《深入理解Java內(nèi)存模型》系列技術(shù)文章。

圖書目錄

Contents目  錄
贊 譽(yù)
前 言
第1章 Java并發(fā)編程基礎(chǔ) 1
1.1 線程簡(jiǎn)介 1
1.1.1 什么是線程 1
1.1.2 為什么要使用多線程 2
1.1.3 線程優(yōu)先級(jí) 3
1.1.4 線程的狀態(tài) 4
1.1.5 Daemon線程 8
1.2 啟動(dòng)和終止線程 8
1.2.1 構(gòu)造線程 9
1.2.2 啟動(dòng)線程 9
1.2.3 理解中斷 9
1.2.4 過期的suspend()、resume()和
stop() 11
1.2.5 安全地終止線程 12
1.3 線程間通信 13
1.3.1 volatile和synchronized關(guān)鍵字 13
1.3.2 等待/通知機(jī)制 15
1.3.3 等待/通知的經(jīng)典范式 18
1.3.4 管道輸入/輸出流 19
1.3.5 thread.join()的使用 20
1.3.6 ThreadLocal的使用 22
1.4 線程應(yīng)用實(shí)例 23
1.4.1 等待超時(shí)模式 23
1.4.2 一個(gè)簡(jiǎn)單的數(shù)據(jù)庫連接池示例 23
1.4.3 線程池技術(shù)及其示例 27
1.4.4 一個(gè)基于線程池技術(shù)的簡(jiǎn)單
Web服務(wù)器 30
1.5 本章小結(jié) 34
第2章 并發(fā)編程的挑戰(zhàn) 35
2.1 上下文切換 35
2.1.1 多線程一定快嗎 35
2.1.2 測(cè)試上下文切換次數(shù)和時(shí)長 37
2.1.3 如何減少上下文切換 37
2.1.4 減少上下文切換實(shí)戰(zhàn) 38
2.2 死鎖 39
2.3 資源限制的挑戰(zhàn) 40
2.4 本章小結(jié) 41
第3章 Java并發(fā)機(jī)制的底層實(shí)現(xiàn)
原理 42
3.1 volatile的應(yīng)用 42
3.2 synchronized的實(shí)現(xiàn)原理與應(yīng)用 45
3.2.1 Java對(duì)象頭 46
3.2.2 鎖的升級(jí)與對(duì)比 47
3.3 原子操作的實(shí)現(xiàn)原理 50
3.4 本章小結(jié) 54
第4章 Java內(nèi)存模型 55
4.1 Java內(nèi)存模型基礎(chǔ) 55
4.1.1 并發(fā)編程模型的兩個(gè)關(guān)鍵
問題 55
4.1.2 Java內(nèi)存模型的抽象結(jié)構(gòu) 56
4.1.3 從源代碼到指令序列的重
排序 57
4.1.4 并發(fā)編程模型的分類 58
4.1.5 happens-before簡(jiǎn)介 60
4.2 重排序 61
4.2.1 數(shù)據(jù)依賴性 62
4.2.2 as-if-serial語義 62
4.2.3 程序順序規(guī)則 63
4.2.4 重排序?qū)Χ嗑€程的影響 63
4.3 順序一致性 65
4.3.1 數(shù)據(jù)競(jìng)爭(zhēng)與順序一致性 65
4.3.2 順序一致性內(nèi)存模型 66
4.3.3 同步程序的順序一致性效果 68
4.3.4 未同步程序的執(zhí)行特性 69
4.4 volatile的內(nèi)存語義 71
4.4.1 volatile的特性 72
4.4.2 volatile寫-讀建立的
happens-before關(guān)系 73
4.4.3 volatile寫-讀的內(nèi)存語義 74
4.4.4 volatile內(nèi)存語義的實(shí)現(xiàn) 76
4.4.5 JSR-133為什么要增強(qiáng)volatile的
內(nèi)存語義 80
4.5 鎖的內(nèi)存語義 81
4.5.1 鎖的釋放-獲取建立的
happens-before關(guān)系 81
4.5.2 鎖的釋放和獲取的內(nèi)存語義 81
4.5.3 鎖內(nèi)存語義的實(shí)現(xiàn) 83
4.5.4 concurrent包的實(shí)現(xiàn) 87
4.6 f?inal域的內(nèi)存語義 89
4.6.1 f?inal域的重排序規(guī)則 89
4.6.2 寫f?inal域的重排序規(guī)則 89
4.6.3 讀f?inal域的重排序規(guī)則 90
4.6.4 f?inal域?yàn)橐妙愋汀?2
4.6.5 為什么f?inal引用不能在構(gòu)造
函數(shù)中“逸出” 93
4.6.6 f?inal語義在處理器中的實(shí)現(xiàn) 94
4.6.7 JSR-133為什么要增強(qiáng)f?inal的
語義 95
4.7 happens-before 95
4.7.1 JMM的設(shè)計(jì) 95
4.7.2 happens-before的定義 97
4.7.3 happens-before規(guī)則 98
4.8 雙重檢查鎖定與延遲初始化 100
4.8.1 雙重檢查鎖定的由來 100
4.8.2 問題的根源 102
4.8.3 基于volatile的解決方案 104
4.8.4 基于類初始化的解決方案 105
4.9 Java內(nèi)存模型綜述 111
4.9.1 處理器的內(nèi)存模型 111
4.9.2 各種內(nèi)存模型之間的關(guān)系 112
4.9.3 JMM的內(nèi)存可見性保證 114
4.9.4 JSR-133對(duì)舊內(nèi)存模型的修補(bǔ) 115
4.10 JDK 9內(nèi)存順序模型 115
4.10.1 背景 115
4.10.2 Plain 116
4.10.3 Opaque 116
4.10.4 Release/Acquire 117
4.10.5 volatile 118
4.10.6 總結(jié) 118
4.11 本章小結(jié) 119
第5章 Java中的鎖 120
5.1 Lock接口 120
5.2 隊(duì)列同步器 122
5.2.1 隊(duì)列同步器的接口與示例 122
5.2.2 隊(duì)列同步器的實(shí)現(xiàn)分析 125
5.3 重入鎖 136
5.4 讀寫鎖 141
5.4.1 讀寫鎖的接口與示例 141
5.4.2 讀寫鎖的實(shí)現(xiàn)分析 143
5.5 StampedLock 146
5.5.1 StampedLock的接口與示例 147
5.5.2 StampedLock的實(shí)現(xiàn)分析 152
5.6 LockSupport工具 160
5.7 Condition接口 161
5.7.1 Condition的接口與示例 162
5.7.2 Condition的實(shí)現(xiàn)分析 164
5.8 本章小結(jié) 168
第6章 Java并發(fā)容器和框架 169
6.1 ConcurrentHashMap的實(shí)現(xiàn)
原理與使用 169
6.1.1 為什么要使用
ConcurrentHashMap 169
6.1.2 ConcurrentHashMap的結(jié)構(gòu) 170
6.1.3 ConcurrentHashMap的
初始化 171
6.1.4 定位Segment 173
6.1.5 ConcurrentHashMap的操作 174
6.1.6 JDK 8中的
ConcurrentHashMap 175
6.2 ConcurrentLinkedQueue 175
6.2.1 ConcurrentLinkedQueue的
結(jié)構(gòu) 176
6.2.2 入隊(duì)列 176
6.2.3 出隊(duì)列 179
6.3 Java中的阻塞隊(duì)列 181
6.3.1 什么是阻塞隊(duì)列 181
6.3.2 7個(gè)阻塞隊(duì)列 182
6.3.3 阻塞隊(duì)列的實(shí)現(xiàn)原理 186
6.4 Fork/Join框架 189
6.4.1 什么是Fork/Join框架 189
6.4.2 工作竊取算法 190
6.4.3 Fork/Join框架的設(shè)計(jì) 190
6.4.4 使用Fork/Join框架 191
6.4.5 Fork/Join框架的異常處理 192
6.4.6 Fork/Join框架的實(shí)現(xiàn)原理 193
6.5 本章小結(jié) 194
第7章 Java中的13個(gè)原子操作類 195
7.1 原子更新基本類型 195
7.2 原子更新數(shù)組類型 197
7.3 原子更新引用類型 198
7.4 原子更新字段類型 199
7.5 JDK 8中的原子更新新特性 200
7.6 本章小結(jié) 201
第8章 Java中的并發(fā)工具類 202
8.1 等待多線程完成的
CountDownLatch 202
8.2 同步屏障CyclicBarrier 204
8.2.1 CyclicBarrier簡(jiǎn)介 204
8.2.2 CyclicBarrier的應(yīng)用場(chǎng)景 206
8.2.3 CyclicBarrier和
CountDownLatch的區(qū)別 208
8.3 控制并發(fā)線程數(shù)的Semaphore 209
8.4 線程間交換數(shù)據(jù)的Exchanger 210
8.5 本章小結(jié) 211
第9章 Java中的線程池 212
9.1 線程池的實(shí)現(xiàn)原理 212
9.2 線程池的使用 215
9.2.1 線程池的創(chuàng)建 215
9.2.2 向線程池提交任務(wù) 216
9.2.3 關(guān)閉線程池 217
9.2.4 合理地配置線程池 217
9.2.5 線程池的監(jiān)控 218
9.3 本章小結(jié) 219
第10章 Executor框架 220
10.1 Executor框架簡(jiǎn)介 220
10.1.1 Executor框架的兩級(jí)調(diào)度
模型 220
10.1.2 Executor框架的結(jié)構(gòu)與成員 220
10.2 ThreadPoolExecutor詳解 225
10.2.1 FixedThreadPool詳解 225
10.2.2 SingleThreadExecutor
詳解 226
10.2.3 CachedThreadPool詳解 227
10.3 ScheduledThreadPoolExecutor
?詳解 229
10.3.1 ScheduledThreadPoolExecutor的
運(yùn)行機(jī)制 229
10.3.2 ScheduledThreadPoolExecutor的
實(shí)現(xiàn) 230
10.4 FutureTask詳解 233
10.4.1 FutureTask簡(jiǎn)介 233
10.4.2 FutureTask的使用 235
10.4.3 JDK 6的FutureTask實(shí)現(xiàn) 236
10.4.4 JDK 8的FutureTask實(shí)現(xiàn) 238
10.5 本章小結(jié) 243
第11章 Java并發(fā)編程實(shí)踐 244
11.1 生產(chǎn)者和消費(fèi)者模式 244
11.1.1 生產(chǎn)者和消費(fèi)者模式實(shí)戰(zhàn) 245
11.1.2 多生產(chǎn)者和多消費(fèi)者場(chǎng)景 247
11.1.3 線程池與生產(chǎn)者和消費(fèi)者
模式 250
11.2 線上問題定位 250
11.3 性能測(cè)試 252
11.4 異步任務(wù)池 254
11.5 本章小結(jié) 256
第12章 分布式編程基礎(chǔ) 257
12.1 分布式CAP原則 257
12.1.1 CAP原則簡(jiǎn)介 257
12.1.2 CAP原則證明 258
12.1.3 CAP原則思考 260
12.2 分布式事務(wù):兩階段提交 262
12.2.1 分布式事務(wù)面臨的挑戰(zhàn) 262
12.2.2 拜占庭將軍問題 263
12.2.3 兩階段提交協(xié)議 264
12.2.4 對(duì)兩階段提交的思考 265
12.3 分布式事務(wù):TCC 266
12.3.1 TCC的主要優(yōu)勢(shì) 267
12.3.2 TCC的使用代價(jià) 269
12.3.3 支持TCC的Seata 270
12.3.4 一個(gè)基于Seata的參考
示例 273
12.4 分布式協(xié)議:RAFT 279
12.4.1 RAFT的運(yùn)行流程 279
12.4.2 集群中斷和恢復(fù) 280
12.5 分布式協(xié)議:Paxos 282
12.5.1 背景 282
12.5.2 Basic Paxos 285
12.5.3 Multi-Paxos 301
12.6 本章小結(jié) 306
第13章 分布式鎖 308
13.1 什么是分布式鎖 308
13.1.1 分布式鎖的定義 308
13.1.2 使用分布式鎖的原因 309
13.1.3 分布式鎖的分類 309
13.2 實(shí)現(xiàn)分布式鎖會(huì)遇到的問題 310
13.2.1 性能問題 311
13.2.2 正確性問題 313
13.2.3 可用性問題 313
13.2.4 成本問題 315
13.3 分布式鎖框架 316
13.3.1 為什么需要分布式鎖框架 317
13.3.2 分布式鎖框架的組成 317
13.3.3 實(shí)現(xiàn):基于Redis的
分布式鎖 321
13.3.4 擴(kuò)展:分布式鎖訪問日志 325
13.4 拉模式的分布式鎖 327
13.4.1 什么是拉模式 327
13.4.2 拉模式需要注意的問題 329
13.4.3 Redis分布式鎖實(shí)現(xiàn) 330

本目錄推薦

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