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

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

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

定 價:¥109.00

作 者: 方騰飛 魏鵬 程曉明
出版社: 機械工業(yè)出版社
叢編項:
標 簽: 暫缺

購買這本書可以去


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

內(nèi)容簡介

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

作者簡介

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

圖書目錄

Contents目  錄
贊 譽
前 言
第1章 Java并發(fā)編程基礎(chǔ) 1
1.1 線程簡介 1
1.1.1 什么是線程 1
1.1.2 為什么要使用多線程 2
1.1.3 線程優(yōu)先級 3
1.1.4 線程的狀態(tài) 4
1.1.5 Daemon線程 8
1.2 啟動和終止線程 8
1.2.1 構(gòu)造線程 9
1.2.2 啟動線程 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 等待/通知機制 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)用實例 23
1.4.1 等待超時模式 23
1.4.2 一個簡單的數(shù)據(jù)庫連接池示例 23
1.4.3 線程池技術(shù)及其示例 27
1.4.4 一個基于線程池技術(shù)的簡單
Web服務(wù)器 30
1.5 本章小結(jié) 34
第2章 并發(fā)編程的挑戰(zhàn) 35
2.1 上下文切換 35
2.1.1 多線程一定快嗎 35
2.1.2 測試上下文切換次數(shù)和時長 37
2.1.3 如何減少上下文切換 37
2.1.4 減少上下文切換實戰(zhàn) 38
2.2 死鎖 39
2.3 資源限制的挑戰(zhàn) 40
2.4 本章小結(jié) 41
第3章 Java并發(fā)機制的底層實現(xiàn)
原理 42
3.1 volatile的應(yīng)用 42
3.2 synchronized的實現(xiàn)原理與應(yīng)用 45
3.2.1 Java對象頭 46
3.2.2 鎖的升級與對比 47
3.3 原子操作的實現(xiàn)原理 50
3.4 本章小結(jié) 54
第4章 Java內(nèi)存模型 55
4.1 Java內(nèi)存模型基礎(chǔ) 55
4.1.1 并發(fā)編程模型的兩個關(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簡介 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ù)競爭與順序一致性 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)存語義的實現(xiàn) 76
4.4.5 JSR-133為什么要增強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)存語義的實現(xiàn) 83
4.5.4 concurrent包的實現(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域為引用類型 92
4.6.5 為什么f?inal引用不能在構(gòu)造
函數(shù)中“逸出” 93
4.6.6 f?inal語義在處理器中的實現(xiàn) 94
4.6.7 JSR-133為什么要增強f?inal的
語義 95
4.7 happens-before 95
4.7.1 JMM的設(shè)計 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對舊內(nèi)存模型的修補 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 隊列同步器 122
5.2.1 隊列同步器的接口與示例 122
5.2.2 隊列同步器的實現(xiàn)分析 125
5.3 重入鎖 136
5.4 讀寫鎖 141
5.4.1 讀寫鎖的接口與示例 141
5.4.2 讀寫鎖的實現(xiàn)分析 143
5.5 StampedLock 146
5.5.1 StampedLock的接口與示例 147
5.5.2 StampedLock的實現(xiàn)分析 152
5.6 LockSupport工具 160
5.7 Condition接口 161
5.7.1 Condition的接口與示例 162
5.7.2 Condition的實現(xiàn)分析 164
5.8 本章小結(jié) 168
第6章 Java并發(fā)容器和框架 169
6.1 ConcurrentHashMap的實現(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 入隊列 176
6.2.3 出隊列 179
6.3 Java中的阻塞隊列 181
6.3.1 什么是阻塞隊列 181
6.3.2 7個阻塞隊列 182
6.3.3 阻塞隊列的實現(xiàn)原理 186
6.4 Fork/Join框架 189
6.4.1 什么是Fork/Join框架 189
6.4.2 工作竊取算法 190
6.4.3 Fork/Join框架的設(shè)計 190
6.4.4 使用Fork/Join框架 191
6.4.5 Fork/Join框架的異常處理 192
6.4.6 Fork/Join框架的實現(xiàn)原理 193
6.5 本章小結(jié) 194
第7章 Java中的13個原子操作類 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簡介 204
8.2.2 CyclicBarrier的應(yī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 線程池的實現(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框架簡介 220
10.1.1 Executor框架的兩級調(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的
運行機制 229
10.3.2 ScheduledThreadPoolExecutor的
實現(xiàn) 230
10.4 FutureTask詳解 233
10.4.1 FutureTask簡介 233
10.4.2 FutureTask的使用 235
10.4.3 JDK 6的FutureTask實現(xiàn) 236
10.4.4 JDK 8的FutureTask實現(xiàn) 238
10.5 本章小結(jié) 243
第11章 Java并發(fā)編程實踐 244
11.1 生產(chǎn)者和消費者模式 244
11.1.1 生產(chǎn)者和消費者模式實戰(zhàn) 245
11.1.2 多生產(chǎn)者和多消費者場景 247
11.1.3 線程池與生產(chǎn)者和消費者
模式 250
11.2 線上問題定位 250
11.3 性能測試 252
11.4 異步任務(wù)池 254
11.5 本章小結(jié) 256
第12章 分布式編程基礎(chǔ) 257
12.1 分布式CAP原則 257
12.1.1 CAP原則簡介 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 對兩階段提交的思考 265
12.3 分布式事務(wù):TCC 266
12.3.1 TCC的主要優(yōu)勢 267
12.3.2 TCC的使用代價 269
12.3.3 支持TCC的Seata 270
12.3.4 一個基于Seata的參考
示例 273
12.4 分布式協(xié)議:RAFT 279
12.4.1 RAFT的運行流程 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 實現(xiàn)分布式鎖會遇到的問題 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 實現(xiàn):基于Redis的
分布式鎖 321
13.3.4 擴展:分布式鎖訪問日志 325
13.4 拉模式的分布式鎖 327
13.4.1 什么是拉模式 327
13.4.2 拉模式需要注意的問題 329
13.4.3 Redis分布式鎖實現(xiàn) 330

本目錄推薦

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