關(guān)于我們
書單推薦
新書推薦
|
Java高并發(fā)編程詳解:多線程與架構(gòu)設(shè)計(jì) 本書主要包含四個(gè)部分: *部分主要闡述Thread的基礎(chǔ)知識(shí),詳細(xì)介紹線程的API使用、線程安全、線程間數(shù)據(jù)通信,以及如何保護(hù)共享資源等內(nèi)容,它是深入學(xué)習(xí)多線程內(nèi)容的基礎(chǔ)。 第二部分引入了ClassLoader,這是因?yàn)镃lassLoader與線程不無關(guān)系,我們可以通過synchronized關(guān)鍵字,或者Lock等顯式鎖的方式在代碼的編寫階段對共享資源進(jìn)行數(shù)據(jù)一致性保護(hù),那么一個(gè)Class在完成初始化的整個(gè)過程到*后在方法區(qū)(JDK8 以后在元數(shù)據(jù)空間)其數(shù)據(jù)結(jié)構(gòu)是怎樣確保數(shù)據(jù)一致性的呢?這就需要對ClassLoader有一個(gè)比較全面的認(rèn)識(shí)和了解。 第三部分詳細(xì)、深入地介紹volatile關(guān)鍵字的語義,volatile關(guān)鍵字在Java中非常重要,可以說它奠定了Java核心并發(fā)包的高效運(yùn)行,在這一部分中,我們通過實(shí)例展示了如何使用volatile關(guān)鍵字以及非常詳細(xì)地介紹了Java內(nèi)存模型等知識(shí)。 本書的第四部分,站在程序架構(gòu)設(shè)計(jì)的角度深入講解了如何設(shè)計(jì)高效靈活的多線程應(yīng)用程序,這一部分長達(dá)15個(gè)章節(jié),其重要程度可見一斑。 m 立足于線程源碼剖析,從基礎(chǔ)入手,逐層漸進(jìn)深入,環(huán)環(huán)緊扣,針對技術(shù)細(xì)節(jié)進(jìn)行了細(xì)致歸納,在解讀源碼的時(shí)候又引入了優(yōu)秀的架構(gòu)設(shè)計(jì)。 m 以業(yè)務(wù)場景下的真實(shí)問題作為導(dǎo)向,詳細(xì)闡述每一個(gè)解決方案的來龍去脈,突出身臨其境的閱讀效果。 m 將大量的實(shí)際案例、原理剖析和實(shí)戰(zhàn)代碼相結(jié)合,讓讀者能夠更加清晰深入地理解每一個(gè)技術(shù)細(xì)節(jié)的用法和實(shí)用技巧。 m 結(jié)合業(yè)界公認(rèn)的好的設(shè)計(jì)架構(gòu)技巧模式解決實(shí)際開發(fā)中遇到的問題,站在程序架構(gòu)設(shè)計(jì)的角度指導(dǎo)讀者設(shè)計(jì)高效靈活的多線程應(yīng)用程序。 為什么寫這本書從大學(xué)畢業(yè)到現(xiàn)在已有11年的時(shí)間,在這11年中,我一直保持著一個(gè)習(xí)慣,將工作中用到的技術(shù)梳理成系統(tǒng)性的文檔。在項(xiàng)目的開發(fā)過程中,由于時(shí)間的緊迫性,我們對某個(gè)技術(shù)領(lǐng)域知識(shí)的掌握往往都是比較碎片化的,系統(tǒng)化地串聯(lián)知識(shí)碎片,不僅能加深對該技術(shù)的掌握,還能方便日后快速查閱,幫助記憶。截至目前,我已經(jīng)在互聯(lián)網(wǎng)上發(fā)布了大約12本電子書,主要是圍繞著項(xiàng)目構(gòu)建工具、Java開發(fā)的相關(guān)技術(shù)、NoSQL、J2EE等內(nèi)容展開的。 2017年年初,很多人看過我寫的《Java 8 之Stream》電子書之后,給我發(fā)郵件,希望我寫一本能夠涵蓋Java 8 所有新特性的電子書。最開始一兩個(gè)人這樣提議的時(shí)候,我并沒有在意,后來越來越多的朋友都有類似的需求,由于寫電子書需要花費(fèi)很長的時(shí)間,于是我嘗試著將Java 8 新特性錄制成視頻教程,大概花了一個(gè)月的業(yè)余時(shí)間我錄制了40集《汪文君Java8實(shí)戰(zhàn)視頻》,視頻一經(jīng)推出收獲了非常多的好評,所幸大家都比較喜歡我的授課風(fēng)格,在過去的2017年,我一口氣錄制了11套視頻教程,超過400集(每集都在30分鐘左右),當(dāng)然也包括本書Java高并發(fā)相關(guān)的內(nèi)容。 在我的計(jì)劃中,關(guān)于Java高并發(fā)的內(nèi)容將會(huì)發(fā)布4套視頻教程,分別是:第一階段(Java多線程基礎(chǔ)),第二階段(Java內(nèi)存模型,高并發(fā)設(shè)計(jì)模式),第三階段(Java并發(fā)包JUC),第四階段(Java并發(fā)包源碼剖析AQS)。其中三個(gè)階段都已經(jīng)發(fā)布了,在今日頭條《心藍(lán)說Java》中累計(jì)播放時(shí)長超過20萬分鐘,百度云盤下載量也是超過了30萬余次。由于內(nèi)容太多,本書只涵蓋了前兩個(gè)階段的內(nèi)容,經(jīng)過了數(shù)以萬計(jì)讀者對視頻教程問題的指正,本書的寫作相對比較順利,本書內(nèi)容不僅修復(fù)了視頻講解中無法修復(fù)的缺陷,而且還加入了我對Java高并發(fā)更深一層的領(lǐng)悟和體會(huì) 本書是我第一本正式出版的書稿,關(guān)于本書的寫作可以說是一次偶然的機(jī)緣巧合,在2017年9月初,機(jī)械工業(yè)出版社華章圖書公司的策劃編輯Lisa找到了我,她覺得我的視頻內(nèi)容比較系統(tǒng),非常適合以書稿的形式發(fā)表,我們簡單交流之后就快速敲定了本書內(nèi)容的主體結(jié)構(gòu),圍繞著高并發(fā)視頻教程的前兩個(gè)階段展開,在今年我也會(huì)努力將高并發(fā)后兩個(gè)階段的內(nèi)容編著成書,使之盡快與讀者見面。 讀者對象l 計(jì)算機(jī)相關(guān)專業(yè)的在校學(xué)生。 l 從事Java語言的開發(fā)者。 l 從事Java系統(tǒng)架構(gòu)的架構(gòu)師。 l 使用Java作為開發(fā)語言的公司與集體。 l 開設(shè)Java課程的專業(yè)院校。 l 開設(shè)Java課程的培訓(xùn)機(jī)構(gòu)。 如何閱讀本書本書主要分為四個(gè)大的主題部分,其中,第一部分主要闡述Thread的基礎(chǔ)知識(shí),詳細(xì)介紹線程的API使用、線程安全、線程間數(shù)據(jù)通信以及如何保護(hù)共享資源等內(nèi)容,它是深入學(xué)習(xí)多線程內(nèi)容的基礎(chǔ)。 在第二部分中之所以引入ClassLoader,是因?yàn)镃lassLoader與線程不無關(guān)系,我們可以通過synchronized關(guān)鍵字,或者Lock等顯式鎖的方式在代碼的編寫階段對共享資源進(jìn)行數(shù)據(jù)一致性保護(hù),那么一個(gè)Class在完成初始化的整個(gè)過程到最后在方法區(qū)(JDK8 以后在元數(shù)據(jù)空間)其數(shù)據(jù)結(jié)構(gòu)是怎樣確保數(shù)據(jù)一致性的呢?這就需要對ClassLoader有一個(gè)比較全面的認(rèn)識(shí)和了解。 在本書的第三部分中,我們花費(fèi)了三個(gè)章節(jié)的內(nèi)容來詳細(xì)、深入地介紹volatile關(guān)鍵字的語義,volatile關(guān)鍵字在Java中非常重要,可以說它奠定了Java核心并發(fā)包的高效運(yùn)行,在這一部分中,我們通過實(shí)例展示了如何使用volatile關(guān)鍵字以及非常詳細(xì)地介紹了Java內(nèi)存模型等知識(shí)。 本書的最后一部分也就是第四部分,站在程序架構(gòu)設(shè)計(jì)的角度講解如何設(shè)計(jì)高效靈活的多線程應(yīng)用程序,第四部分應(yīng)該是內(nèi)容最多的一部分,總共包含了十五個(gè)章節(jié)。 勘誤和支持由于作者的水平有限,編寫的時(shí)間也很倉促,書中難免會(huì)出現(xiàn)一些錯(cuò)誤或者不準(zhǔn)確的地方,懇請讀者批評指正。如果在閱讀的過程中發(fā)現(xiàn)任何問題都?xì)g迎將您寶貴的意見發(fā)送到我的個(gè)人郵箱532500648@qq.com,我會(huì)專門在我的今日頭條 《心藍(lán)說Java》開設(shè)專欄,用于修復(fù)書中出現(xiàn)錯(cuò)誤和不妥的地方,我真摯地期待著您的建議和反饋。 致謝首先要感謝我的父親,在我很小的時(shí)候,他就教育我做任何事情都要腳踏實(shí)地,一步一個(gè)腳印,做人不能浮躁,任何事情都不是一蹴而就的,這也致使我在遇到發(fā)展瓶頸的時(shí)候總能夠耐得住性子尋求突破。 在本書最后一部分編寫的過程中,我的妻子經(jīng)歷了十月懷胎為我生下了一對龍鳳胎汪子敬、汪子兮兄妹,他倆的到來讓我感覺到了初為人父的激動(dòng)與喜悅,更加體會(huì)到了為人父母的不容易,感謝我的妻子,多謝你的支持和理解,本書的出版應(yīng)該有一半你的功勞。 我還要感謝在我一路成長過程中帶給我很多幫助的同事及朋友徐景輝、Andrew Davidson、Bonson、Winne、Wilson、龍含等,在本書還是草稿階段的時(shí)候,你們就給了我很多建設(shè)性的意見和建議。 當(dāng)然也不能忘了感謝本書的策劃編輯Lisa老師,是你直接促成了本書的誕生,在過去的半年多里,你反復(fù)不斷地幫我審稿,修改錯(cuò)別字,調(diào)整不通順的語句,你的專業(yè)水準(zhǔn)和敬業(yè)精神幫助和鼓舞著本書能夠最終順利完稿。 最后一定要感謝我所在的研發(fā)團(tuán)隊(duì)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等,多謝你們在工作中對我的幫助。 謹(jǐn)以此書,獻(xiàn)給我最親愛的家人,以及眾多熱愛Java開發(fā)的朋友們。 汪文君(Alex Wang) 中國,廣州,2018年3月 汪文君 匯豐軟件(廣東)研發(fā)中心數(shù)據(jù)服務(wù)中心技術(shù)經(jīng)理、技術(shù)專家,目前專注于實(shí)時(shí)數(shù)據(jù)data pipeline平臺(tái)的構(gòu)建與架構(gòu),在加入?yún)R豐軟件以前,曾有5年多的移動(dòng)通訊工作經(jīng)驗(yàn),以及移動(dòng)互聯(lián)網(wǎng)、云計(jì)算和B2C電子商務(wù)平臺(tái)的開發(fā)架構(gòu)經(jīng)驗(yàn),熱衷于技術(shù)分享、技術(shù)細(xì)節(jié)錘煉。目前已錄制10余套技術(shù)視頻,在互聯(lián)網(wǎng)上廣泛傳播。 第一部分:多線程基礎(chǔ) 20 第1章:快速認(rèn)識(shí)線程 22 1.1 線程的介紹 22 1.2 快速創(chuàng)建并啟動(dòng)一個(gè)線程 22 1.2.1 嘗試并行運(yùn)行 23 1.2.2 并發(fā)運(yùn)行交替輸出 24 1.2.3 使用Jconsole觀察線程 25 1.3 線程的生命周期詳解 26 1.3.1 線程的NEW狀態(tài) 27 1.3.2 線程的RUNNABLE狀態(tài) 28 1.3.3 線程的 RUNNING狀態(tài) 28 1.3.4 線程的BLOCKED狀態(tài) 29 1.3.5 線程的TERMINATED狀態(tài) 29 1.4 線程的start方法剖析--模板設(shè)計(jì)模式在Thread中的應(yīng)用 30 1.4.1 Thread start方法源碼分析以及注意事項(xiàng) 30 1.4.2 模板設(shè)計(jì)模式在Thread中的應(yīng)用 33 1.4.3 Thread模擬營業(yè)大廳叫號(hào)機(jī)程序 34 1.5 Runnable接口的引入以及策略模式在Thread中的使用 39 1.5.1 Runnable的職責(zé) 39 1.5.2 策略模式在Thread中的應(yīng)用 40 1.5.3 模擬營業(yè)大廳叫號(hào)機(jī)程序 42 1.6 本章總結(jié) 43 第2章:深入理解Thread構(gòu)造函數(shù) 45 2.1 線程的命名 45 2.1.1 線程的默認(rèn)命名 45 2.1.2 命名線程 46 2.1.3 修改線程的名字 47 2.2 線程的父子關(guān)系 48 2.3 Thread與ThreadGroup 48 2.4 Thread與Runnable 50 2.5 Thread與JVM虛擬機(jī)棧 50 2.5.1 Thread與Stacksize 51 2.5.2 JVM內(nèi)存結(jié)構(gòu) 53 2.5.3 Thread與虛擬機(jī)棧 58 2.6 守護(hù)線程 62 2.6.1 什么是守護(hù)線程 62 2.6.2 守護(hù)線程的作用 64 2.7 本章總結(jié) 64 第3章:Thread API的詳細(xì)介紹 66 3.1 線程sleep 66 3.1.1 sleep方法介紹 66 3.1.2 使用TimeUnit替代Thread.sleep 67 3.2 線程yield 68 3.2.1 yield方法介紹 68 3.2.2 yield vs sleep 69 3.3 設(shè)置線程的優(yōu)先級 69 3.3.1 線程優(yōu)先級介紹 70 3.3.2 線程優(yōu)先級源碼分析 71 3.3.3 關(guān)于優(yōu)先級的一些總結(jié) 72 3.4 獲取線程ID 73 3.5 獲取當(dāng)前線程 73 3.6 設(shè)置線程上下文類加載器 74 3.7 線程interrupt 75 3.7.1 interrupt 75 3.7.2 isInterrupted 77 3.7.3 interrupted 79 3.7.4 interrupt注意事項(xiàng) 81 3.8 線程join 82 3.8.1 線程join方法詳解 83 3.8.2 join方法結(jié)合實(shí)戰(zhàn) 85 3.9 如何關(guān)閉一個(gè)線程 90 3.9.1 正常關(guān)閉 90 3.9.2 異常退出 94 3.9.3 進(jìn)程假死 94 3.10 本章總結(jié) 95 第4章:線程安全與數(shù)據(jù)同步 97 4.1 數(shù)據(jù)同步 97 4.1.1 數(shù)據(jù)不一致問題的引入 97 4.1.2 數(shù)據(jù)不一致問題原因分析 99 4.2 初識(shí) synchronized關(guān)鍵字 101 4.2.1 什么是synchronized 102 4.2.2 synchronized關(guān)鍵字的用法 103 4.3 深入synchronized關(guān)鍵字 105 4.3.1 線程堆棧分析 105 4.3.2 JVM指令分析 108 4.3.3 使用synchronized需要注意的問題 112 4.4 This Monitor和Class Monitor的詳細(xì)介紹 114 4.4.1 this monitor 114 4.4.2 class monitor 117 4.5 程序死鎖的原因以及如何診斷 120 4.5.1 程序死鎖 120 4.5.2 程序死鎖舉例 121 4.5.3 死鎖診斷 124 4.6 本章總結(jié) 126 第5章:線程間通信 127 5.1 同步阻塞與異步非阻塞 127 5.1.1 同步阻塞消息處理 127 5.1.2 異步非阻塞消息處理 128 5.2 單線程間通信 129 5.2.1 初識(shí)wait和notify 129 5.2.2 wait和notify方法詳解 133 5.2.3 wait和notify注意事項(xiàng) 135 5.2.4 wait vs sleep 137 5.3 多線程間通信 137 5.3.1 生產(chǎn)者消費(fèi)者 137 5.3.2 線程休息室wait set 140 5.4 自定義顯式鎖BooleanLock 141 5.4.1 synchronized關(guān)鍵字的缺陷 142 5.4.2 顯式鎖BooleanLock 143 5.5 本章總結(jié) 153 第6章:ThreadGroup詳細(xì)講解 155 6.1 ThreadGroup與Thread 155 6.2 創(chuàng)建Thread Group 155 6.3 拷貝Thread數(shù)組和ThreadGroup數(shù)組 157 6.3.1 拷貝Thread數(shù)組 157 6.3.2 拷貝ThreadGroup數(shù)組 159 6.4 ThreadGroup操作 160 6.4.1 ThreadGroup的基本操作 161 6.4.2 ThreadGroup的interrupt 164 6.4.3 ThreadGroup的destroy 166 6.4.4 守護(hù)ThreadGroup 168 6.5 本章總結(jié) 169 第7章:Hook線程以及捕獲線程執(zhí)行異常 170 7.1 獲取線程運(yùn)行時(shí)異常 170 7.1.1 UncaughtExceptionHandler介紹 170 7.1.2 UncaughtExceptionHandler實(shí)例 171 7.1.3 UncaughtExceptionHandler源碼分析 173 7.2 注入鉤子線程(Hook) 175 7.2.1 Hook線程介紹 175 7.2.2 Hook線程實(shí)戰(zhàn) 177 7.2.3 Hook線程應(yīng)用場景以及注意事項(xiàng) 179 7.3 本章總結(jié) 179 第8章:線程池原理以及自定義線程池 180 8.1 線程池原理 180 8.2 線程池實(shí)現(xiàn) 181 8.2.1 線程池接口定義 182 8.2.2 線程池詳細(xì)實(shí)現(xiàn) 188 8.3 線程池應(yīng)用 198 8.4 本章總結(jié) 202 第二部分:Java ClassLoader 204 第9章 類的加載過程 205 9.1 類的加載過程介紹 205 9.2 類的主動(dòng)使用和被動(dòng)使用 206 9.3 類加載過程詳解 209 9.3.1 類的加載階段 210 9.3.2 類的連接階段 212 9.3.3 類的初始化階段 219 9.4 本章總結(jié) 221 第10章 JVM類加載器 224 10.1 JVM內(nèi)置三大類加載器 224 10.1.1 根類加載器介紹 225 10.1.2 擴(kuò)展類加載器介紹 226 10.1.3 系統(tǒng)類加載器介紹 227 10.2 自定義類加載器 227 10.2.1 自定義類加載器,問候世界 228 10.2.2 雙親委托機(jī)制詳細(xì)介紹 233 10.2.3 破壞雙親委托機(jī)制 236 10.2.4 類加載器命名空間,運(yùn)行時(shí)包,類的卸載等 239 10.3 本章總結(jié) 246 第11章 線程上下文類加載器 249 11.1 為什么需要線程上下文類加載器 249 11.2 數(shù)據(jù)庫驅(qū)動(dòng)的初始化源碼分析 250 第三部分 深入理解volatile關(guān)鍵字 254 第12章 volatile關(guān)鍵字的介紹 255 12.1 初識(shí)volatile關(guān)鍵字 255 12.2 機(jī)器硬件CPU 257 12.3 Java 內(nèi)存模型 262 第13章 深入volatile關(guān)鍵字 265 13.1 并發(fā)編程的三個(gè)重要特性 265 13.1.1 原子性 265 13.1.2 可見性 266 13.1.3 有序性 266 13.2 JMM如何保證三大特性 268 13.2.1 JMM與原子性 269 13.2.2 JMM與可見性 271 13.2.3 JMM與有序性 272 13.3 volatile關(guān)鍵字深入解析 273 13.3.1 volatile關(guān)鍵字的語義 274 13.3.2 volatile的原理和實(shí)現(xiàn)機(jī)制 277 13.3.3 volatile的使用場景 278 13.3.4 volatile vs synchronized 280 第15章 7種單例設(shè)計(jì)模式的設(shè)計(jì) 282 14.1 餓漢式 282 14.2 懶漢式 283 14.3 懶漢式 同步方法 284 14.4 Double-Check 285 14.5 Volatile Double-Check 288 14.6 Holder方式 288 14.7枚舉方式 289 14.8本章總結(jié) 291 第四部分 多線程設(shè)計(jì)架構(gòu)模式 292 第15章 監(jiān)控任務(wù)的生命周期 296 15.1 場景描述 296 15.2 當(dāng)觀察者模式遇到Thread 296 15.2.1 接口定義 296 15.2.2 ObservableThread實(shí)現(xiàn) 300 15.3 測試及技巧總結(jié) 303 15.3.1 測試運(yùn)行 303 15.3.2 關(guān)鍵點(diǎn)總結(jié) 304 第16章 Single Thread Execution設(shè)計(jì)模式 305 16.1 機(jī)場過安檢 305 16.1.1 非線程安全 305 16.1.2 問題分析 308 16.1.3 線程安全 310 16.2 吃面問題 311 16.2.1 吃面引起的死鎖 312 16.2.2 解決吃面引起的死鎖問題 314 16.2.3 哲學(xué)家吃面 316 16.3 本章總結(jié) 317 第17章 讀寫鎖分離設(shè)計(jì)模式 318 17.1 場景描述 318 17.2 讀寫分離程序設(shè)計(jì) 318 17.2.1 接口定義 318 17.2.2 程序?qū)崿F(xiàn) 321 17.3 讀寫鎖的使用 328 17.4 關(guān)于更多讀寫鎖的話題 332 第18章 不可變對象設(shè)計(jì)模式 334 18.1 線程安全性 334 18.2 不可變對象的設(shè)計(jì) 334 18.2.1 非線程安全的累加器 335 18.2.2 方法同步增加線程安全性 338 18.2.3 不可變的累加器對象設(shè)計(jì) 339 18.3 技巧總結(jié) 341 第19章 Future設(shè)計(jì)模式 342 19.1 先給你一張憑據(jù) 342 19.2 Future設(shè)計(jì)模式實(shí)現(xiàn) 342 19.2.1 接口定義 343 19.2.2 程序?qū)崿F(xiàn) 344 19.3 Future的使用以及技巧總結(jié) 347 19.4 增強(qiáng)FutureService使其支持回調(diào) 349 19.5 本章總結(jié) 351 第20章 Guarded Suspension 設(shè)計(jì)模式 352 20.1 什么是Guarded Suspension設(shè)計(jì)模式 352 20.2 Guarded Suspension示例 352 第21章 線程上下文設(shè)計(jì)模式 355 21.1 什么是上下文 355 21.2 線程上下文設(shè)計(jì) 356 21.3 ThreadLocal詳解 358 21.3.1 ThreadLocal的使用場景及注意事項(xiàng) 358 21.3.2 ThreadLocal的方法詳解及源碼分析 359 21.3.3 ThreadLocal的內(nèi)存泄漏問題分析 365 21.4 使用ThreadLocal設(shè)計(jì)線程上下文 370 第22章 Balking設(shè)計(jì)模式 373 22.1 什么是Balking設(shè)計(jì) 373 22.2 Balking模式之文檔編輯 374 22.2.1 Document 374 22.2.2 AutoSaveThread 377 22.2.3 DocumentEditThread 378 22.3 本章總結(jié) 380 第23章 Latch設(shè)計(jì)模式 381 23.1 什么是Latch 381 23.2 CountDownLatch程序?qū)崿F(xiàn) 382 23.2.1 無限等待的Latch 382 23.2.2 有超時(shí)設(shè)置的Latch 387 23.3 Latch設(shè)計(jì)模式總結(jié) 389 第24章 Thread-Per-Message設(shè)計(jì)模式 392 24.1 什么是Thread-Per-Message 392 24.2 每個(gè)任務(wù)一個(gè)線程 392 24.3 多用戶的網(wǎng)絡(luò)聊天 395 24.3.1 服務(wù)端程序 396 24.3.2 響應(yīng)客戶端連接的Handler 397 24.3.3 聊天程序測試 400 24.4 本章總結(jié) 400 第25章 Two Phase Termination設(shè)計(jì)模式 401 25.1 什么是Two Phase Termination 401 25.2 Two Phase Termination示例 402 25.2.1 線程停止的Two Phase Termination 402 25.2.2 進(jìn)程關(guān)閉的Two Phase Termination 404 25.3 知識(shí)擴(kuò)展 404 25.3.1 Strong Reference(強(qiáng)引用)及LRUCache 405 25.3.2 Soft Reference(軟引用)及SoftLRUCache 410 25.3.3 Weak Reference(弱引用) 413 25.3.4 Phantom Reference(幻影引用) 415 25.4 本章總結(jié) 418 第26章 Worker-Thread設(shè)計(jì)模式 419 26.1 什么是Worker-Thread模式 419 26.2 Worker-Thread模式實(shí)現(xiàn) 419 26.2.1 產(chǎn)品及組裝說明書 420 26.2.2 流水線傳送帶 421 26.2.3 流水線工人 423 26.3 Worker-Thread模式測試與總結(jié) 425 26.3.1 產(chǎn)品流水線測試 425 26.3.2 Worker-Thread vs Producer-Consumer 426 第27章 Active Objects設(shè)計(jì)模式 428 27.1 接受異步消息的主動(dòng)對象 428 27.2 標(biāo)準(zhǔn)Active Objects模式設(shè)計(jì) 428 27.2.1 OrderService接口設(shè)計(jì) 430 27.2.2 OrderServiceImpl 詳解 431 27.2.3 OrderServiceProxy詳解 432 27.2.4 MethodMessage 434 27.2.5 ActiveMessageQueue 437 27.2.6 OrderServiceFactory及測試 439 27.3 通用Active Objects框架設(shè)計(jì) 441 27.3.1 ActiveMessage詳解 442 27.3.2 @ActiveMethod 445 27.3.3 ActiveServiceFactory詳解 446 27.3.4 ActiveMessageQueue及其它 449 27.4 Active Objects總結(jié) 451 第28章 Event Bus(消息總線)設(shè)計(jì)模式 452 28.1 Event Bus設(shè)計(jì) 452 28.1.1 Bus接口詳解 453 28.1.2 同步EventBus詳解 455 28.1.3 異步EventBus詳解 458 28.1.4 Subscriber注冊表Registry詳解 459 28.1.5 Event廣播Dispatcher詳解 462 28.1.6其它類接口設(shè)計(jì) 466 28.1.7 Event Bus測試 468 28.2 Event Bus實(shí)戰(zhàn)--監(jiān)控目錄變化 470 28.2.1 WatchService遇到EventBus 471 28.2.2 FileChangeEvent 473 28.2.3 監(jiān)控目錄變化 473 28.3 EventBus總結(jié) 475 第29章 Event Driven(事件驅(qū)動(dòng)) 設(shè)計(jì)模式 476 29.1 Event-Driven Architecture基礎(chǔ) 476 29.1.1 Events 476 29.1.2 Event Handlers 477 29.1.3 Event Loop 478 29.2 開發(fā)一個(gè)Event-Driven 框架 480 29.2.1 同步EDA框架設(shè)計(jì) 480 29.2.2 異步EDA框架設(shè)計(jì) 487 29.3 Event-Driven的使用 492 29.3.1 Chat Event 492 29.3.2 Chat Channel(Handler) 494 29.3.3 Chat User線程 495 29.4 本章總結(jié) 498
你還可能感興趣
我要評論
|