關(guān)于我們
書(shū)單推薦
新書(shū)推薦
|
Java并發(fā)編程的藝術(shù) 讀者對(duì)象:JAVA語(yǔ)言程序設(shè)計(jì)人員
本書(shū)從并發(fā)編程的底層實(shí)現(xiàn)機(jī)制入手,圍繞JDK源碼、JVM、CPU等多角度詳細(xì)介紹了設(shè)計(jì)Java并發(fā)程序的框架、原理、核心技術(shù)、設(shè)計(jì)模式與應(yīng)用,同時(shí)輔以豐富的示例代碼,使得開(kāi)發(fā)人員能夠更快地領(lǐng)悟Java并發(fā)編程的要領(lǐng),利用Java平臺(tái)的基礎(chǔ)并發(fā)功能快速地構(gòu)建大規(guī)模的并發(fā)應(yīng)用。
適讀人群 :*Java開(kāi)發(fā)工程師、架構(gòu)師、并發(fā)編程愛(ài)好者、開(kāi)設(shè)相關(guān)課程的大專(zhuān)院校師生
(1)公認(rèn)標(biāo)準(zhǔn)著作:第1版在廣大讀者和Java專(zhuān)家群體中均獲得了超高口碑,是Java并發(fā)編程領(lǐng)域公認(rèn)的標(biāo)準(zhǔn)性著作。
【第2版迎來(lái)重大更新:】 為了反映Java并發(fā)編程領(lǐng)域的最新變化,為了解決Java并發(fā)編程領(lǐng)域的最新難題,本書(shū)第2版修訂和新增的內(nèi)容超過(guò)50%。 (1)第4章更新并增加“JDK9內(nèi)存順序模型”; (2)第5章更新并增加“StampedLock”“LockSupport 工具”“Condition 接口”; (3)第6章更新并增加“JDK 8 中的 ConcurrentHashMap”; (4)第7章更新并增加“ JDK 8 中的原子更新新特性”; (5)第10章更新并增加“JDK 8 的FutureTask 實(shí)現(xiàn)”; (6)新增第12章“分布式編程基礎(chǔ)”; (7)新增第13章“分布式鎖”; (8)新增第14章“分布式系統(tǒng)架構(gòu)”。
【為什么要寫(xiě)這本書(shū)】
【第2版與第1版的區(qū)別】
【本書(shū)特色】
【讀者對(duì)象】
【如何閱讀本書(shū)】
本書(shū)共14章,由三位作者共同完成。其中第1章、第5章和第13章由魏鵬編寫(xiě),第4章和第10章由程曉明編寫(xiě),第12章由三位作者共同編寫(xiě),第14章由程曉明和方騰飛編寫(xiě),其余7章由方騰飛編寫(xiě)。
方騰飛(花名:清英;英文名:kiral)
*魏鵬
*程曉明 前 言 第1章 Java并發(fā)編程基礎(chǔ) 1 1.1 線(xiàn)程簡(jiǎn)介 1 1.1.1 什么是線(xiàn)程 1 1.1.2 為什么要使用多線(xiàn)程 2 1.1.3 線(xiàn)程優(yōu)先級(jí) 3 1.1.4 線(xiàn)程的狀態(tài) 4 1.1.5 Daemon線(xiàn)程 8 1.2 啟動(dòng)和終止線(xiàn)程 8 1.2.1 構(gòu)造線(xiàn)程 9 1.2.2 啟動(dòng)線(xiàn)程 9 1.2.3 理解中斷 9 1.2.4 過(guò)期的suspend()、resume()和 stop() 11 1.2.5 安全地終止線(xiàn)程 12 1.3 線(xiàn)程間通信 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 線(xiàn)程應(yīng)用實(shí)例 23 1.4.1 等待超時(shí)模式 23 1.4.2 一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)連接池示例 23 1.4.3 線(xiàn)程池技術(shù)及其示例 27 1.4.4 一個(gè)基于線(xiàn)程池技術(shù)的簡(jiǎn)單 Web服務(wù)器 30 1.5 本章小結(jié) 34 第2章 并發(fā)編程的挑戰(zhàn) 35 2.1 上下文切換 35 2.1.1 多線(xiàn)程一定快嗎 35 2.1.2 測(cè)試上下文切換次數(shù)和時(shí)長(zhǎng) 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)鍵 問(wèn)題 55 4.1.2 Java內(nèi)存模型的抽象結(jié)構(gòu) 56 4.1.3 從源代碼到指令序列的重 排序 57 4.1.4 并發(fā)編程模型的分類(lèi) 58 4.1.5 happens-before簡(jiǎn)介 60 4.2 重排序 61 4.2.1 數(shù)據(jù)依賴(lài)性 62 4.2.2 as-if-serial語(yǔ)義 62 4.2.3 程序順序規(guī)則 63 4.2.4 重排序?qū)Χ嗑(xiàn)程的影響 63 4.3 順序一致性 65 4.3.1 數(shù)據(jù)競(jìng)爭(zhēng)與順序一致性 65 4.3.2 順序一致性?xún)?nèi)存模型 66 4.3.3 同步程序的順序一致性效果 68 4.3.4 未同步程序的執(zhí)行特性 69 4.4 volatile的內(nèi)存語(yǔ)義 71 4.4.1 volatile的特性 72 4.4.2 volatile寫(xiě)-讀建立的 happens-before關(guān)系 73 4.4.3 volatile寫(xiě)-讀的內(nèi)存語(yǔ)義 74 4.4.4 volatile內(nèi)存語(yǔ)義的實(shí)現(xiàn) 76 4.4.5 JSR-133為什么要增強(qiáng)volatile的 內(nèi)存語(yǔ)義 80 4.5 鎖的內(nèi)存語(yǔ)義 81 4.5.1 鎖的釋放-獲取建立的 happens-before關(guān)系 81 4.5.2 鎖的釋放和獲取的內(nèi)存語(yǔ)義 81 4.5.3 鎖內(nèi)存語(yǔ)義的實(shí)現(xiàn) 83 4.5.4 concurrent包的實(shí)現(xiàn) 87 4.6 f?inal域的內(nèi)存語(yǔ)義 89 4.6.1 f?inal域的重排序規(guī)則 89 4.6.2 寫(xiě)f?inal域的重排序規(guī)則 89 4.6.3 讀f?inal域的重排序規(guī)則 90 4.6.4 f?inal域?yàn)橐妙?lèi)型 92 4.6.5 為什么f?inal引用不能在構(gòu)造 函數(shù)中“逸出” 93 4.6.6 f?inal語(yǔ)義在處理器中的實(shí)現(xiàn) 94 4.6.7 JSR-133為什么要增強(qiáng)f?inal的 語(yǔ)義 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 雙重檢查鎖定的由來(lái) 100 4.8.2 問(wèn)題的根源 102 4.8.3 基于volatile的解決方案 104 4.8.4 基于類(lèi)初始化的解決方案 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)存可見(jiàn)性保證 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 讀寫(xiě)鎖 141 5.4.1 讀寫(xiě)鎖的接口與示例 141 5.4.2 讀寫(xiě)鎖的實(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è)原子操作類(lèi) 195 7.1 原子更新基本類(lèi)型 195 7.2 原子更新數(shù)組類(lèi)型 197 7.3 原子更新引用類(lèi)型 198 7.4 原子更新字段類(lèi)型 199 7.5 JDK 8中的原子更新新特性 200 7.6 本章小結(jié) 201 第8章 Java中的并發(fā)工具類(lèi) 202 8.1 等待多線(xiàn)程完成的 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ā)線(xiàn)程數(shù)的Semaphore 209 8.4 線(xiàn)程間交換數(shù)據(jù)的Exchanger 210 8.5 本章小結(jié) 211 第9章 Java中的線(xiàn)程池 212 9.1 線(xiàn)程池的實(shí)現(xiàn)原理 212 9.2 線(xiàn)程池的使用 215 9.2.1 線(xiàn)程池的創(chuàng)建 215 9.2.2 向線(xiàn)程池提交任務(wù) 216 9.2.3 關(guān)閉線(xiàn)程池 217 9.2.4 合理地配置線(xiàn)程池 217 9.2.5 線(xiàn)程池的監(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 線(xiàn)程池與生產(chǎn)者和消費(fèi)者 模式 250 11.2 線(xiàn)上問(wèn)題定位 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 拜占庭將軍問(wèn)題 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 分布式鎖的分類(lèi) 309 13.2 實(shí)現(xiàn)分布式鎖會(huì)遇到的問(wèn)題 310 13.2.1 性能問(wèn)題 311 13.2.2 正確性問(wèn)題 313 13.2.3 可用性問(wèn)題 313 13.2.4 成本問(wèn)題 315 13.3 分布式鎖框架 316 13.3.1 為什么需要分布式鎖框架 317 13.3.2 分布式鎖框架的組成 317 13.3.3 實(shí)現(xiàn):基于Redis的 分布式鎖 321 13.3.4 擴(kuò)展:分布式鎖訪問(wèn)日志 325 13.4 拉模式的分布式鎖 327 13.4.1 什么是拉模式 327 13.4.2 拉模式需要注意的問(wèn)題 329 13.4.3 Redis分布式鎖實(shí)現(xiàn) 330 13.4.4 Redis分布式鎖存在的 問(wèn)題 333 13.4.5 擴(kuò)展:本地?zé)狳c(diǎn)鎖 337 13.5 推模式的分布式鎖 340 13.5.1 什么是推模式 341 13.5.2 ZooKeeper如何實(shí)現(xiàn)推模式的 分布式鎖 343 13.5.3 Curator分布式鎖 349 13.5.4 ZooKeeper分布式鎖實(shí)現(xiàn) 351 13.5.5 ZooKeeper分布式鎖存在的 問(wèn)題 351 13.6 再看分布式鎖 353 13.6.1 比選擇推與拉更重要的 是什么 353 13.6.2 解鎖勝于用鎖 355 13.7 本章小結(jié) 357 第14章 分布式系統(tǒng)架構(gòu) 358 14.1 分布式場(chǎng)景下的限流架構(gòu)方案 358 14.1.1 限流算法 358 14.1.2 基于Redis的分布式限流 360 14.1.3 基于Sentinel的分布式 限流 365 14.2 分布式場(chǎng)景下的秒殺架構(gòu) 方案 366 14.2.1 背景 366 14.2.2 需求分析 366 14.2.3 用例分析 367 14.2.4 秒殺流程圖 367 14.2.5 關(guān)鍵設(shè)計(jì):庫(kù)存設(shè)計(jì) 368 14.2.6 關(guān)鍵設(shè)計(jì):秒殺令牌 369 14.3 分布式場(chǎng)景下的高并發(fā)架構(gòu) 方案 369 14.3.1 應(yīng)對(duì)高并發(fā)的常用策略 369 14.3.2 減少?gòu)?qiáng)依賴(lài) 370 14.3.3 多層故障隔離 371 14.3.4 五種架構(gòu)選型 372 14.3.5 三種緩存設(shè)計(jì)方案 372 14.4 分布式場(chǎng)景下的資損防控 372 14.4.1 資損的定義 372 14.4.2 如何進(jìn)行資損防控 373 14.4.3 第一道防線(xiàn):事前規(guī)避 373 14.4.4 第二道防線(xiàn):事中定位 374 14.4.5 第三道防線(xiàn):事后應(yīng)急 375 14.4.6 如何進(jìn)行資損演練 376 14.5 分布式場(chǎng)景下的穩(wěn)定性保障 376 14.5.1 什么是穩(wěn)定性保障 376 14.5.2 明確穩(wěn)定性保障目標(biāo) 376 14.5.3 如何進(jìn)行穩(wěn)定性保障 377 14.5.4 大促穩(wěn)定性保障 380 14.6 本章小結(jié) 382
你還可能感興趣
我要評(píng)論
|