發表於2024-12-19
阿裏係和1號店資深技術專傢撰寫,Java並發編程領域的扛鼎之作,內容在InfoQ等社群得到高度認可
從JDK源碼、JVM、CPU等多角度全麵剖析和講解Java並發編程的框架、原理和核心技術
隨著大數據時代的來臨,程序員可能每天要處理幾十個TB的數據,如何讓程序快速且安全地處理各種大數據,就需要掌握不同的並發編程模型和並發編程技巧。用戶的一個點擊,需要在毫秒級處理完多個任務,同樣需要並發編程的參與。
並發編程是Java語言的重要特性之一,在Java平颱上提供瞭許多基本的並發功能來輔助開發多綫程應用程序。然而,這些相對底層的並發功能與上層應用程序的並發語義之間並不存在一種簡單而直觀的映射關係。因此,如何在Java並發應用程序中正確且高效地使用這些功能就成瞭Java開發人員的關注重點。
《Java並發編程的藝術》正是為瞭解決這個問題而寫的。書中采用循序漸進的講解方式,從並發編程的底層實現機製入手,逐步介紹瞭在設計Java並發程序時各種重要的技術、設計模式與應用,同時輔以豐富的示例代碼,使得開發人員能夠更快地領悟Java並發編程的要領,圍繞著Java平颱的基礎並發功能快速地構建大規模的並發應用程序。
更多精彩,點擊進入品牌店查閱>>
並發編程領域的扛鼎之作,作者是阿裏和1號店的資深Java技術專傢,對並發編程有非常深入的研究,《Java並發編程的藝術》是他們多年一綫開發經驗的結晶。本書的部分內容在齣版早期發錶在Java並發編程網和InfoQ等技術社區,得到瞭非常高的評價。它選取瞭Java並發編程中核心的技術進行講解,從JDK源碼、JVM、CPU等多角度全麵剖析和講解瞭Java並發編程的框架、工具、原理和方法,對Java並發編程進行瞭為深入和透徹的闡述。
《Java並發編程的藝術》內容涵蓋Java並發編程機製的底層實現原理、Java內存模型、Java並發編程基礎、Java中的鎖、並發容器和框架、原子類、並發工具類、綫程池、Executor框架等主題,每個主題都做瞭深入的講解,同時通過實例介紹瞭如何應用這些技術。
方騰飛(花名清英,英文名kiral),
螞蟻金服集團技術專傢,從事Java開發近10年。5年以上的團隊管理、項目管理和敏捷開發經驗,崇尚團隊閤作。曾參與CMS、電子海圖、SOC、ITIL、電子商務網站和信貸管理係統等項目。目前在螞蟻金服網商銀行貸款管理團隊負責數據采集平颱開發工作。與同事閤作開發瞭tala code Review插件,深受阿裏數韆名工程師擁躉,並開發過開源工具jdbcutil(https://github.com/kiral/utils)。創辦瞭並發編程網,組織翻譯瞭百餘篇國外優秀技術文章,並曾為InfoQ撰寫“聊聊並發”專欄,在《程序員》雜誌撰寫敏捷實踐係列文章
魏 鵬,
阿裏巴巴集團技術專傢,在阿裏巴巴中國網站技術部工作多年,曾擔任中國網站交易平颱架構師,主導瞭交易係統服務化工作,設計實現的數據遷移係統高效地完成瞭阿裏巴巴中國網站交易數據到阿裏巴巴集團的遷移工作。目前在阿裏巴巴共享業務事業部從事Java應用容器Pandora和服務框架HSF的相關工作,其中Java應用容器Pandora是阿裏巴巴中間件運行的基礎,而服務框架HSF則是阿裏巴巴集團實現服務化的主要解決方案,二者在阿裏巴巴擁有為廣泛的使用量。個人平時喜歡閱讀技術書籍,翻譯一些國外優秀文檔,喜歡總結、樂於分享,對Java應用容器、多綫程編程以及分布式係統感興趣。
程曉明,
1號店資深架構師,從事1號店交易平颱係統的開發,技術上關注並發與NIO。因5年前遇到的一個綫上故障,解決過程中對Java並發編程産生瞭濃厚的興趣,從此開始瞭漫長的探索之旅:從底層實現機製、內存模型到Java同步。縱觀我自己對Java並發的學習過程,是一個從高層到底層再到高層的一個反復迭代的過程,我估計很多讀者的學習過程應該與我類似。文章多見諸《IBM developerWorks》、InfoQ和《程序員》雜誌。
前 言
第1章 並發編程的挑戰 1
1.1 上下文切換 1
1.1.1 多綫程一定快嗎 1
1.1.2 測試上下文切換次數和時長 3
1.1.3 如何減少上下文切換 3
1.1.4 減少上下文切換實戰 4
1.2 死鎖 5
1.3 資源限製的挑戰 6
1.4 本章小結 7
第2章 Java並發機製的底層實現原理 8
2.1 volatile的應用 8
2.2 synchronized的實現原理與應用 11
2.2.1 Java對象頭 12
2.2.2 鎖的升級與對比 13
2.3 原子操作的實現原理 16
2.4 本章小結 20
第3章 Java內存模型 21
3.1 Java內存模型的基礎 21
3.1.1 並發編程模型的兩個關鍵問題 21
3.1.2 Java內存模型的抽象結構 22
3.1.3 從源代碼到指令序列的重排序 23
3.1.4 並發編程模型的分類 24
3.1.5 happens-before簡介 26
3.2 重排序 27
3.2.1 數據依賴性 28
3.2.2 as-if-serial語義 28
3.2.3 程序順序規則 29
3.2.4 重排序對多綫程的影響 29
3.3 順序一緻性 31
3.3.1 數據競爭與順序一緻性 31
3.3.2 順序一緻性內存模型 32
3.3.3 同步程序的順序一緻性效果 34
3.3.4 未同步程序的執行特性 35
3.4 volatile的內存語義 38
3.4.1 volatile的特性 38
3.4.2 volatile寫-讀建立的happens-before關係 39
3.4.3 volatile寫-讀的內存語義 40
3.4.4 volatile內存語義的實現 42
3.4.5 JSR-133為什麼要增強volatile的內存語義 46
3.5 鎖的內存語義 47
3.5.1 鎖的釋放-獲取建立的
happens-before關係 47
3.5.2 鎖的釋放和獲取的內存語義 48
3.5.3 鎖內存語義的實現 50
3.5.4 concurrent包的實現 54
3.6 final域的內存語義 55
3.6.1 final域的重排序規則 55
3.6.2 寫final域的重排序規則 56
3.6.3 讀final域的重排序規則 57
3.6.4 final域為引用類型 58
3.6.5 為什麼final引用不能從構造函數內“溢齣” 59
3.6.6 final語義在處理器中的實現 61
3.6.7 JSR-133為什麼要增強f?inal的語義 62
3.7 happens-before 62
3.7.1 JMM的設計 62
3.7.2 happens-before的定義 64
3.7.3 happens-before規則 65
3.8 雙重檢查鎖定與延遲初始化 67
3.8.1 雙重檢查鎖定的由來 67
3.8.2 問題的根源 69
3.8.3 基於volatile的解決方案 71
3.8.4 基於類初始化的解決方案 72
3.9 Java內存模型綜述 78
3.9.1 處理器的內存模型 78
3.9.2 各種內存模型之間的關係 80
3.9.3 JMM的內存可見性保證 80
3.9.4 JSR-133對舊內存模型的修補 81
3.10 本章小結 82
第4章 Java並發編程基礎 83
4.1 綫程簡介 83
4.1.1 什麼是綫程 83
4.1.2 為什麼要使用多綫程 84
4.1.3 綫程優先級 85
4.1.4 綫程的狀態 87
4.1.5 Daemon綫程 90
4.2 啓動和終止綫程 91
4.2.1 構造綫程 91
4.2.2 啓動綫程 92
4.2.3 理解中斷 92
4.2.4 過期的suspend()、resume()和stop() 93
4.2.5 安全地終止綫程 95
4.3 綫程間通信 96
4.3.1 volatile和synchronized關鍵字 96
4.3.2 等待/通知機製 98
4.3.3 等待/通知的經典範式 101
4.3.4 管道輸入/輸齣流 102
4.3.5 Thread.join()的使用 103
4.3.6 ThreadLocal的使用 105
4.4 綫程應用實例 106
4.4.1 等待超時模式 106
4.4.2 一個簡單的數據庫連接池示例 106
4.4.3 綫程池技術及其示例 110
4.4.4 一個基於綫程池技術的簡單Web服務器 114
4.5 本章小結 118
第5章 Java中的鎖 119
5.1 Lock接口 119
5.2 隊列同步器 121
5.2.1 隊列同步器的接口與示例 121
5.2.2 隊列同步器的實現分析 124
5.3 重入鎖 136
5.4 讀寫鎖 140
5.4.1 讀寫鎖的接口與示例 141
5.4.2 讀寫鎖的實現分析 142
5.5 LockSupport工具 146
5.6 Condition接口 147
5.6.1 Condition接口與示例 148
5.6.2 Condition的實現分析 150
5.7 本章小結 154
第6章 Java並發容器和框架 155
6.1 ConcurrentHashMap的實現原理與使用 155
6.1.1 為什麼要使用ConcurrentHashMap 155
6.1.2 ConcurrentHashMap的結構 156
6.1.3 ConcurrentHashMap的初始化 157
6.1.4 定位Segment 159
6.1.5 ConcurrentHashMap的操作 160
6.2 ConcurrentLinkedQueue 161
6.2.1 ConcurrentLinkedQueue的結構 162
6.2.2 入隊列 162
6.2.3 齣隊列 165
6.3 Java中的阻塞隊列 167
6.3.1 什麼是阻塞隊列 167
6.3.2 Java裏的阻塞隊列 168
6.3.3 阻塞隊列的實現原理 172
6.4 Fork/Join框架 175
6.4.1 什麼是Fork/Join框架 175
6.4.2 工作竊取算法 176
6.4.3 Fork/Join框架的設計 177
6.4.4 使用Fork/Join框架 177
6.4.5 Fork/Join框架的異常處理 179
6.4.6 Fork/Join框架的實現原理 179
6.5 本章小結 181
第7章 Java中的13個原子操作類 182
7.1 原子更新基本類型類 182
7.2 原子更新數組 184
7.3 原子更新引用類型 185
7.4 原子更新字段類 187
7.5 本章小結 188
第8章 Java中的並發工具類 189
8.1 等待多綫程完成的CountDownLatch 189
8.2 同步屏障CyclicBarrier 191
8.2.1 CyclicBarrier簡介 191
8.2.2 CyclicBarrier的應用場景 193
8.2.3 CyclicBarrier和CountDownLatch的區彆 195
8.3 控製並發綫程數的Semaphore 196
8.4 綫程間交換數據的Exchanger 198
8.5 本章小結 199
第9章 Java中的綫程池 200
9.1 綫程池的實現原理 200
9.2 綫程池的使用 203
9.2.1 綫程池的創建 203
9.2.2 嚮綫程池提交任務 205
9.2.3 關閉綫程池 205
9.2.4 閤理地配置綫程池 206
9.2.5 綫程池的監控 206
9.3 本章小結 207
第10章 Executor框架 208
10.1 Executor框架簡介 208
10.1.1 Executor框架的兩級調度模型 208
10.1.2 Executor框架的結構與成員 208
10.2 ThreadPoolExecutor詳解 213
10.2.1 FixedThreadPool詳解 213
10.2.2 SingleThreadExecutor詳解 214
10.2.3 CachedThreadPool詳解 215
10.3 ScheduledThreadPoolExecutor詳解 217
10.3.1 ScheduledThreadPoolExecutor的運行機製 217
10.3.2 ScheduledThreadPoolExecutor的實現 218
10.4 FutureTask詳解 221
10.4.1 FutureTask簡介 222
10.4.2 FutureTask的使用 222
10.4.3 FutureTask的實現 224
10.5 本章小結 227
第11章 Java並發編程實踐 228
11.1 生産者和消費者模式 228
11.1.1 生産者消費者模式實戰 229
11.1.2 多生産者和多消費者場景 231
11.1.3 綫程池與生産消費者模式 234
11.2 綫上問題定位 234
11.3 性能測試 236
11.4 異步任務池 238
11.5 本章小結 240
為什麼要寫這本書記得第一次寫並發編程的文章時還是在2012年,當時花瞭幾個星期的時間寫瞭一篇文章《深入分析volatile的實現原理》,準備在自己的博客中發錶。在同事建法的建議下,懷著試一試的心態投嚮瞭InfoQ,慶幸的是半小時後得到InfoQ主編采納的迴復,高興之情無以言錶。這也是我第一次在專業媒體上發錶文章,而後在InfoQ編輯張龍的不斷鼓勵和支持下,我陸續在InfoQ發錶瞭幾篇與並發編程相關的文章,於是便形成瞭“聊聊並發”專欄。在這個專欄的寫作過程中,我得到快速的成長和非常多的幫助,在此非常感謝InfoQ的編輯們。2013年,華章的福川兄找到我,問有沒有興趣寫一本書,當時覺得自己資曆尚淺,婉言拒絕瞭。後來和福川兄一直保持聯係,最後允許我花兩年的時間來完成本書,所以答應瞭下來。由於並發編程領域的技術點非常多且深,所以陸續又邀請瞭同事魏鵬和朋友曉明一起參與到本書的編寫當中。
寫本書的過程也是對自己研究和掌握的技術點進行整理的過程,希望本書能幫助讀者快速掌握並發編程技術。
本書一共11章,由三名作者共同編寫完成,其中第3章和第10章節由程曉明編寫,第4章和第5章由魏鵬編寫,其他7章由方騰飛編寫。
本書特色本書結閤JDK的源碼介紹瞭Java並發框架、綫程池的實現原理,幫助讀者做到知其所以然。
本書對原理的剖析不僅僅局限於Java層麵,而是深入到JVM,甚至CPU層麵來進行講解,幫助讀者從更底層看並發技術。
本書結閤綫上應用,給齣瞭一些並發編程實戰技巧,以及綫上處理並發問題的步驟和思路。
讀者對象Java開發工程師架構師並發編程愛好者開設相關課程的大專院校師生如何閱讀本書閱讀本書之前,你必須有一定的Java基礎和開發經驗,最好還有一定的並發編程基礎。如果你是一名並發編程初學者,建議按照順序閱讀本書,並按照書中的例子進行編碼和實戰。如果你有一定的並發編程經驗,可以把本書當做一個手冊,直接看需要學習的章節。以下是各章節的基本介紹。
第1章介紹Java並發編程的挑戰,嚮讀者說明進入並發編程的世界可能會遇到哪些問題,以及如何解決。
第2章介紹Java並發編程的底層實現原理,介紹在CPU和JVM這個層麵是如何幫助Java實現並發編程的。
第3章介紹深入介紹瞭Java的內存模型。Java綫程之間的通信對程序員完全透明,內存可見性問題很容易睏擾Java程序員,本章試圖揭開Java內存模型的神秘麵紗。
第4章從介紹多綫程技術帶來的好處開始,講述瞭如何啓動和終止綫程以及綫程的狀態,詳細闡述瞭多綫程之間進行通信的基本方式和等待/通知經典範式。
第5章介紹Java並發包中與鎖相關的API和組件,以及這些API和組件的使用方式與實現細節。
第6章介紹瞭Java中的大部分並發容器,並深入剖析其實現原理,讓讀者領略大師的設計技巧。
第7章介紹瞭Java中的原子操作類,並給齣一些實例。
第8章介紹瞭Java中提供的並發工具類,這是並發編程中的瑞士軍刀。
第9章介紹瞭Java中的綫程池實現原理和使用建議。
第10章介紹瞭Executor框架的整體結構和成員組件。
第11章介紹幾個並發編程的實戰,以及排查並發編程造成問題的方法。
勘誤和支持由於筆者的水平有限,編寫時間倉促,書中難免會齣現一些錯誤或者不準確的地方,懇請讀者批評指正。為此,特意創建一個在綫支持與應急方案的站點。你可以將書中的錯誤發布在勘誤錶頁麵中,同時如果你遇到任何問題,也可以訪問Q&A;頁麵,我將盡量在綫上為讀者提供最滿意的解答。書中的全部源文件除可以從華章網站下載外,還可以從並發編程網站下載,我也會將相應的功能更新及時發布齣來。
緻謝感謝機械工業齣版社華章公司的楊福川、高婧雅、孫海亮,在這一年多的時間中始終支持我的寫作,你們的鼓勵和幫助引導我順利完成全部書稿。
感謝方正電子的劉老師,是他帶我進入瞭麵嚮對象的世界。
感謝我的主管硃老闆,他在工作和生活上給予我很多的幫助和支持,還經常激勵我完成本書編寫。
最後感謝我的爸媽、嶽父母和老婆,感謝你們的支持,並時時刻刻為我灌輸信心和力量!
謹以此書獻給我的兒子方熙皓,希望他能健康成長,以及眾多熱愛並發編程的朋友們,希望你們能快樂工作,認真生活!
方騰飛
Java並發編程的藝術 下載 mobi pdf epub txt 電子書 格式 2024
Java並發編程的藝術 下載 mobi epub pdf 電子書收到瞭書瞭,很滿意啦。
評分不錯的書,買來好好看看
評分活動期間買的很實惠,京東自營,值得信賴。
評分哦還不知道,要看一下,反正是老師推薦的
評分不錯的內容,加強對於並發的理解
評分好好充電,買個書給自己充電,提升工作技能,程序員一枚
評分阿裏的大神編寫,我等懷著敬仰之心仔細拜讀,一定能學到很多東西
評分這次搞活動一次性把想買的書給買瞭,接下來好好看
評分京東物流就是一個字快,昨晚10點多,11點前下的單今天早上就收到,包裝得很好。
Java並發編程的藝術 mobi epub pdf txt 電子書 格式下載 2024