-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Java高并發編程詳解:多線程與架構設計

( 簡體 字)
作者:汪文君 著類別:1. -> 程式設計 -> JAVA -> Java
譯者:
出版社:機械工業出版社Java高并發編程詳解:多線程與架構設計 3dWoo書號: 49088
詢問書籍請說出此書號!

缺書
NT售價: 445

出版日:5/1/2018
頁數:378
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787111599937
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

為什么寫這本書
從大學畢業到現在已有11年的時間,在這11年中,我一直保持著一個習慣,將工作中用到的技術梳理成系統性的文檔。在項目的開發過程中,由于時間的緊迫性,我們對某個技術領域知識的掌握往往都是比較碎片化的,系統化地串聯知識碎片,不僅能加深對該技術的掌握,還能方便日后快速查閱,幫助記憶。截至目前,我已經在互聯網上發布了大約12本電子書,主要是圍繞著項目構建工具、Java開發的相關技術、NoSQL、J2EE等內容展開的。
2017年年初,很多人看過我寫的《Java 8 之Stream》電子書之后,給我發郵件,希望我寫一本能夠涵蓋Java 8 所有新特性的電子書。最開始一兩個人這樣提議的時候,我并沒有在意,后來越來越多的朋友都有類似的需求,由于寫電子書需要花費很長的時間,于是我嘗試著將Java 8 新特性錄制成視頻教程,大概花了一個月的業余時間我錄制了40集《汪文君Java8實戰視頻》,視頻一經推出收獲了非常多的好評,所幸大家都比較喜歡我的授課風格,在過去的2017年,我一口氣錄制了11套視頻教程,超過400集(每集都在30分鐘左右),當然也包括Java高并發相關的內容。
在我的計劃中,關于Java高并發的內容將會發布4套視頻教程,分別是:第一階段(Java多線程基礎),第二階段(Java內存模型,高并發設計模式),第三階段(Java并發包JUC),第四階段(Java并發包源碼剖析AQS)。其中三個階段都已經發布了,在今日頭條《心藍說Java》中累計播放時長超過20萬分鐘,百度云盤下載量也超過了30萬余次。由于內容太多,本書只涵蓋了前兩個階段的內容,經過了數以萬計讀者對視頻教程問題的指正,本書的寫作相對比較順利,本書內容不僅修復了視頻講解中無法修復的缺陷,而且還加入了我對Java高并發更深一層的領悟和體會。
本書是我第一本正式出版的書稿,關于本書的寫作可以說是一次偶然的機緣巧合,在2017年9月初,機械工業出版社的策劃編輯Lisa找到了我,她覺得我的視頻內容比較系統,非常適合以書稿的形式發表,我們簡單交流之后就快速敲定了本書內容的主體結構,圍繞著高并發視頻教程的前兩個階段展開,在今年我也會努力將高并發后兩個階段的內容編著成書,使之盡快與讀者見面。
讀者對象
計算機相關專業的在校學生。
從事Java語言的開發者。
從事Java系統架構的架構師。
使用Java作為開發語言的公司與集體。
開設Java課程的專業院校。
開設Java課程的培訓機構。
如何閱讀本書
本書主要分為四部分,其中,第一部分主要闡述Thread的基礎知識,詳細介紹線程的API使用、線程安全、線程間數據通信以及如何保護共享資源等內容,它是深入學習多線程內容的基礎。
在第二部分中之所以引入ClassLoader,是因為ClassLoader與線程不無關系,我們可以通過synchronized關鍵字,或者Lock等顯式鎖的方式在代碼的編寫階段對共享資源進行數據一致性保護,那么一個Class在完成初始化的整個過程到最后在方法區(JDK8 以后在元數據空間)其數據結構是怎樣確保數據一致性的呢?這就需要對ClassLoader有一個比較全面的認識和了解。
在本書的第三部分中,我用了三章的篇幅來詳細、深入地介紹volatile關鍵字的語義,volatile關鍵字在Java中非常重要,可以說它奠定了Java核心并發包的高效運行,在這一部分中,我們通過實例展示了如何使用volatile關鍵字并非常詳細地介紹了Java內存模型等知識。
本書的最后一部分也就是第四部分,站在程序架構設計的角度講解如何設計高效靈活的多線程應用程序,第四部分應該是內容最多的一部分,總共包含了15章。
勘誤和支持
由于作者的水平有限,編寫的時間也很倉促,書中難免會出現一些錯誤或者不準確的地方,懇請讀者批評指正。如果在閱讀的過程中發現任何問題都歡迎將您寶貴的意見發送到我的個人郵箱,我會專門在我的今日頭條 《心藍說Java》開設專欄,用于修訂書中出現的錯誤和不妥的地方,我真摯地期待著您的建議和反饋。
致謝
首先要感謝我的父親,在我很小的時候,他就教育我做任何事情都要腳踏實地,一步一個腳印,做人不能浮躁,任何事情都不是一蹴而就的,這也致使我在遇到發展瓶頸的時候總能夠耐得住性子尋求突破。
在本書最后一部分編寫的過程中,我的妻子經歷了十月懷胎為我生下了一對龍鳳胎汪子敬、汪子兮兄妹,他倆的到來讓我感覺到了初為人父的激動與喜悅,更加體會到了為人父母的不容易,感謝我的妻子,多謝你的支持和理解,本書的出版應該有一半你的功勞。
我還要感謝在我一路成長過程中帶給我很多幫助的同事及朋友——徐景輝、Andrew Davidson、Bonson、Winne、Wilson、龍含等,在本書還是草稿階段的時候,你們就給了我很多建設性的意見和建議。
當然也不能忘了感謝本書的策劃編輯Lisa老師,是你直接促成了本書的誕生,在過去的半年多里,你反復不斷地幫我審稿,修改錯別字,調整不通順的語句,你的專業水準和敬業精神幫助我最終順利完稿。
最后一定要感謝我所在的研發團隊——GBDS的Jack、Eachur、Jenny、Sebastian、Yuki、Kiki、Dillon、Gavin、Wendy、Josson、Echo、Ivy、Lik、Leo、Allen、Adrian、Kevin、Ken、Terrence,以及VADM的Jeffrey、Robert、Amy、Randy等,多謝你們在工作中對我的幫助。
謹以此書,獻給我最親愛的家人,以及眾多熱愛Java開發的朋友們。汪文君(Alex Wang)
中國,廣州,2018年3月
內容簡介:

隨著計算機硬件的不斷發展,CPU進入多核時代,并發運算因此也上升到了并行運算的高度,作為Java程序員,如何最大化地“壓榨”CPU的資源,利用CPU超高的計算速度編寫高效快速運行的程序,如何解決CPU與RAM之間速度不匹配的問題呢?本書結合作者的實踐經驗,不僅介紹了高速緩存Cache、Cache Line、Java內存模型,以及現代CPU基本架構等相關知識,還深入講解了Java跨平臺的高并發解決方案。



本書的主要內容和特色:

立足于線程源碼剖析,從基礎入手,逐層漸進深入,環環緊扣,針對技術細節進行了細致歸納,在解讀源碼的時候又引入了優秀的架構設計。

以業務場景下的真實問題作為導向,詳細闡述每一個解決方案的來龍去脈,突出“身臨其境”的閱讀效果。

將大量的實際案例、原理剖析和實戰代碼相結合,讓讀者能夠更加清晰深入地理解每一個技術細節的用法和實用技巧。

結合業界公認的好的設計架構技巧模式解決實際開發中遇到的問題,站在程序架構設計的角度指導讀者設計高效靈活的多線程應用程序。

本書主要分為四部分:

第一部分主要闡述Thread的基礎知識,詳細介紹線程的API使用、線程安全、線程間數據通信,以及如何保護共享資源等內容,它是深入學習多線程內容的基礎。

第二部分引入了ClassLoader,這是因為ClassLoader與線程不無關系,我們可以通過synchronized關鍵字,或者Lock等顯式鎖的方式在代碼的編寫階段對共享資源進行數據一致性保護,那么一個Class在完成初始化的整個過程到最后在方法區(JDK8 以后在元數據空間)其數據結構是怎樣確保數據一致性的呢?這就需要對ClassLoader有一個比較全面的認識和了解。

第三部分用三章的篇幅來詳細、深入地介紹volatile關鍵字的語義,volatile關鍵字在Java中非常重要,可以說它奠定了Java核心并發包的高效運行,在這一部分中,我們通過實例展示了如何使用volatile關鍵字,并非常詳細地介紹了Java內存模型等知識。

本書的最后一部分站在程序架構設計的角度深入講解了如何設計高效靈活的多線程應用程序,這一部分長達15章,其重要程度可見一斑。
目錄:

推薦序一
推薦序二
推薦序三
推薦序四
前言
第一部分 多線程基礎
第1章 快速認識線程 3
1.1 線程的介紹 3
1.2 快速創建并啟動一個線程 3
1.2.1 嘗試并行運行 4
1.2.2 并發運行交替輸出 5
1.2.3 使用Jconsole觀察線程 6
1.3 線程的生命周期詳解 7
1.3.1 線程的NEW狀態 8
1.3.2 線程的RUNNABLE狀態 8
1.3.3 線程的 RUNNING狀態 8
1.3.4 線程的BLOCKED狀態 8
1.3.5 線程的TERMINATED狀態 9
1.4 線程的start方法剖析:模板設計模式在Thread中的應用 9
1.4.1 Thread start方法源碼分析以及注意事項 9
1.4.2 模板設計模式在Thread中的應用 11
1.4.3 Thread模擬營業大廳叫號機程序 13
1.5 Runnable接口的引入以及策略模式在Thread中的使用 16
1.5.1 Runnable的職責 16
1.5.2 策略模式在Thread中的應用 16
1.5.3 模擬營業大廳叫號機程序 18
1.6 本章總結 19
第2章 深入理解Thread構造函數 20
2.1 線程的命名 20
2.1.1 線程的默認命名 21
2.1.2 命名線程 21
2.1.3 修改線程的名字 22
2.2 線程的父子關系 22
2.3 Thread與ThreadGroup 23
2.4 Thread與Runnable 24
2.5 Thread與JVM虛擬機棧 25
2.5.1 Thread與Stacksize 25
2.5.2 JVM內存結構 27
2.5.3 Thread與虛擬機棧 30
2.6 守護線程 33
2.6.1 什么是守護線程 33
2.6.2 守護線程的作用 34
2.7 本章總結 34
第3章 Thread API的詳細介紹 35
3.1 線程sleep 35
3.1.1 sleep方法介紹 35
3.1.2 使用TimeUnit替代Thread.sleep 36
3.2 線程yield 37
3.2.1 yield方法介紹 37
3.2.2 yield和sleep 37
3.3 設置線程的優先級 38
3.3.1 線程優先級介紹 38
3.3.2 線程優先級源碼分析 39
3.3.3 關于優先級的一些總結 40
3.4 獲取線程ID 40
3.5 獲取當前線程 41
3.6 設置線程上下文類加載器 41
3.7 線程interrupt 42
3.7.1 interrupt 42
3.7.2 isInterrupted 43
3.7.3 interrupted 45
3.7.4 interrupt注意事項 46
3.8 線程join 47
3.8.1 線程join方法詳解 48
3.8.2 join方法結合實戰 50
3.9 如何關閉一個線程 53
3.9.1 正常關閉 54
3.9.2 異常退出 56
3.9.3 進程假死 56
3.10 本章總結 58
第4章 線程安全與數據同步 59
4.1 數據同步 59
4.1.1 數據不一致問題的引入 59
4.1.2 數據不一致問題原因分析 61
4.2 初識 synchronized關鍵字 62
4.2.1 什么是synchronized 63
4.2.2 synchronized關鍵字的用法 63
4.3 深入synchronized關鍵字 65
4.3.1 線程堆棧分析 65
4.3.2 JVM指令分析 67
4.3.3 使用synchronized需要注意的問題 70
4.4 This Monitor和Class Monitor的詳細介紹 72
4.4.1 this monitor 72
4.4.2 class monitor 74
4.5 程序死鎖的原因以及如何診斷 77
4.5.1 程序死鎖 77
4.5.2 程序死鎖舉例 77
4.5.3 死鎖診斷 80
4.6 本章總結 81
第5章 線程間通信 82
5.1 同步阻塞與異步非阻塞 82
5.1.1 同步阻塞消息處理 82
5.1.2 異步非阻塞消息處理 83
5.2 單線程間通信 84
5.2.1 初識wait和notify 84
5.2.2 wait和notify方法詳解 87
5.2.3 關于wait和notify的注意事項 89
5.2.4 wait和sleep 90
5.3 多線程間通信 90
5.3.1 生產者消費者 90
5.3.2 線程休息室wait set 93
5.4 自定義顯式鎖BooleanLock 94
5.4.1 synchronized關鍵字的缺陷 94
5.4.2 顯式鎖BooleanLock 95
5.5 本章總結 104
第6章 ThreadGroup詳細講解 105
6.1 ThreadGroup與Thread 105
6.2 創建ThreadGroup 105
6.3 復制Thread數組和ThreadGroup數組 106
6.3.1 復制Thread數組 106
6.3.2 復制ThreadGroup數組 109
6.4 ThreadGroup操作 109
6.4.1 ThreadGroup的基本操作 110
6.4.2 ThreadGroup的interrupt 113
6.4.3 ThreadGroup的destroy 114
6.4.4 守護ThreadGroup 115
6.5 本章總結 116
第7章 Hook線程以及捕獲線程執行異常 117
7.1 獲取線程運行時異常 117
7.1.1 UncaughtExceptionHandler的介紹 117
7.1.2 UncaughtExceptionHandler實例 118
7.1.3 UncaughtExceptionHandler源碼分析 119
7.2 注入鉤子線程 121
7.2.1 Hook線程介紹 121
7.2.2 Hook線程實戰 122
7.2.3 Hook線程應用場景以及注意事項 124
7.3 本章總結 124
第8章 線程池原理以及自定義線程池 125
8.1 線程池原理 125
8.2 線程池實現 126
8.2.1 線程池接口定義 127
8.2.2 線程池詳細實現 131
8.3 線程池的應用 139
8.4 本章總結 142
第二部分 Java ClassLoader
第9章 類的加載過程 144
9.1 類的加載過程簡介 144
9.2 類的主動使用和被動使用 145
9.3 類的加載過程詳解 148
9.3.1 類的加載階段 148
9.3.2 類的連接階段 149
9.3.3 類的初始化階段 154
9.4 本章總結 156
第10章 JVM類加載器 158
10.1 JVM內置三大類加載器 158
10.1.1 根類加載器介紹 159
10.1.2 擴展類加載器介紹 159
10.1.3 系統類加載器介紹 160
10.2 自定義類加載器 161
10.2.1 自定義類加載器,問候世界 161
10.2.2 雙親委托機制詳細介紹 165
10.2.3 破壞雙親委托機制 167
10.2.4 類加載器命名空間、運行時包、類的卸載等 170
10.3 本章總結 175
第11章 線程上下文類加載器 177
11.1 為什么需要線程上下文類加載器 177
11.2 數據庫驅動的初始化源碼分析 178
11.3 本章總結 180
第三部分 深入理解volatile關鍵字
第12章 volatile關鍵字的介紹 182
12.1 初識volatile關鍵字 182
12.2 機器硬件CPU 184
12.2.1 CPU Cache模型 184
12.2.2 CPU緩存一致性問題 186
12.3 Java內存模型 187
12.4 本章總結 188
第13章 深入volatile關鍵字 189
13.1 并發編程的三個重要特性 189
13.1.1 原子性 189
13.1.2 可見性 190
13.1.3 有序性 190
13.2 JMM如何保證三大特性 191
13.2.1 JMM與原子性 192
13.2.2 JMM與可見性 193
13.2.3 JMM與有序性 194
13.3 volatile關鍵字深入解析 195
13.3.1 volatile關鍵字的語義 195
13.3.2 volatile的原理和實現機制 197
13.3.3 volatile的使用場景 198
13.3.4 volatile和synchronized 199
13.4 本章總結 200
第14章 7種單例設計模式的設計 201
14.1 餓漢式 201
14.2 懶漢式 202
14.3 懶漢式+同步方法 203
14.4 Double-Check 204
14.5 Volatile+Double-Check 206
14.6 Holder方式 206
14.7 枚舉方式 207
14.8 本章總結 208
第四部分 多線程設計架構模式
第15章 監控任務的生命周期 212
15.1 場景描述 212
15.2 當觀察者模式遇到Thread 212
15.2.1 接口定義 212
15.2.2 ObservableThread實現 215
15.3 本章總結 217
15.3.1 測試運行 217
15.3.2 關鍵點總結 219
第16章 Single Thread Execution設計模式 220
16.1 機場過安檢 220
16.1.1 非線程安全 221
16.1.2 問題分析 223
16.1.3 線程安全 225
16.2 吃面問題 225
16.2.1 吃面引起的死鎖 226
16.2.2 解決吃面引起的死鎖問題 228
16.2.3 哲學家吃面 229
16.3 本章總結 230
第17章 讀寫鎖分離設計模式 231
17.1 場景描述 231
17.2 讀寫分離程序設計 232
17.2.1 接口定義 232
17.2.2 程序實現 234
17.3 讀寫鎖的使用 239
17.4 本章總結 242
第18章 不可變對象設計模式 244
18.1 線程安全性 244
18.2 不可變對象的設計 244
18.2.1 非線程安全的累加器 245
18.2.2 方法同步增加線程安全性 247
18.2.3 不可變的累加器對象設計 248
18.3 本章總結 249
第19章 Future設計模式 251
19.1 先給你一張憑據 251
19.2 Future設計模式實現 251
19.2.1 接口定義 252
19.2.2 程序實現 253
19.3 Future的使用以及技巧總結 256
19.4 增強FutureService使其支持回調 257
19.5 本章總結 258
第20章 Guarded Suspension設計模式 259
20.1 什么是Guarded Suspension設計模式 259
20.2 Guarded Suspension的示例 259
20.3 本章總結 261
第21章 線程上下文設計模式 262
21.1 什么是上下文 262
21.2 線程上下文設計 263
21.3 ThreadLocal詳解 264
21.3.1 ThreadLocal的使用場景及注意事項 265
21.3.2 ThreadLocal的方法詳解及源碼分析 265
21.3.3 ThreadLocal的內存泄漏問題分析 270
21.4 使用ThreadLocal設計線程上下文 274
21.5 本章總結 276
第22章 Balking設計模式 277
22.1 什么是Balking設計 277
22.2 Balking模式之文檔編輯 278
22.2.1 Document 278
22.2.2 AutoSaveThread 280
22.2.3 DocumentEditThread 281
22.3 本章總結 283
第23章 Latch設計模式 284
23.1 什么是Latch 284
23.2 CountDownLatch程序實現 285
23.2.1 無限等待的Latch 285
23.2.2 有超時設置的Latch 289
23.3 本章總結 291
第24章 Thread-Per-Message設計模式 293
24.1 什么是Thread-Per-Message模式 293
24.2 每個任務一個線程 293
24.3 多用戶的網絡聊天 296
24.3.1 服務端程序 296
24.3.2 響應客戶端連接的Handler 297
24.3.3 聊天程序測試 299
24.4 本章總結 300
第25章 Two Phase Termination設計模式 301
25.1 什么是Two Phase Termination模式 301
25.2 Two Phase Termination的示例 302
25.2.1 線程停止的Two Phase Termination 302
25.2.2 進程關閉的Two Phase Termination 303
25.3 知識擴展 304
25.3.1 Strong Reference及LRUCache 304
25.3.2 Soft Reference及SoftLRUCache 308
25.3.3 Weak Reference 311
25.3.4 Phantom Reference 312
25.4 本章總結 314
第26章 Worker-Thread設計模式 315
26.1 什么是Worker-Thread模式 315
26.2 Worker-Thread模式實現 315
26.2.1 產品及組裝說明書 316
26.2.2 流水線傳送帶 317
26.2.3 流水線工人 319
26.3 本章總結 320
26.3.1 產品流水線測試 320
26.3.2 Worker-Thread和Producer-Consumer 321
第27章 Active Objects設計模式 323
27.1 接受異步消息的主動對象 323
27.2 標準Active Objects模式設計 323
27.2.1 OrderService接口設計 325
27.2.2 OrderServiceImpl 詳解 325
27.2.3 OrderServiceProxy詳解 326
27.2.4 MethodMessage 328
27.2.5 ActiveMessageQueue 330
27.2.6 OrderServiceFactory及測試 332
27.3 通用Active Objects框架設計 333
27.3.1 ActiveMessage詳解 334
27.3.2 @ActiveMethod 336
27.3.3 ActiveServiceFactory詳解 337
27.3.4 ActiveMessageQueue及其他 339
27.4 本章總結 341
第28章 Event Bus設計模式 342
28.1 Event Bus設計 343
28.1.1 Bus接口詳解 343
28.1.2 同步EventBus詳解 345
28.1.3 異步EventBus詳解 347
28.1.4 Subscriber注冊表Registry詳解 348
28.1.5 Event廣播Dispatcher詳解 350
28.1.6 其他類接口設計 353
28.1.7 Event Bus測試 355
28.2 Event Bus實戰——監控目錄變化 357
28.2.1 WatchService遇到EventBus 357
28.2.2 FileChangeEvent 359
28.2.3 監控目錄變化 359
28.3 本章總結 360
第29章 Event Driven設計模式 361
29.1 Event-Driven Architecture基礎 361
29.1.1 Events 361
29.1.2 Event Handlers 362
29.1.3 Event Loop 363
29.2 開發一個Event-Driven框架 364
29.2.1 同步EDA框架設計 364
29.2.2 異步EDA框架設計 370
29.3 Event-Driven的使用 375
29.3.1 Chat Event 375
29.3.2 Chat Channel(Handler) 376
29.3.3 Chat User線程 377
29.4 本章總結 379
序: