注冊(cè) | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)JAVA及其相關(guān)Java高并發(fā)核心編程 卷2:多線程、鎖、JMM、JUC、高并發(fā)設(shè)計(jì)模式(加強(qiáng)版)

Java高并發(fā)核心編程 卷2:多線程、鎖、JMM、JUC、高并發(fā)設(shè)計(jì)模式(加強(qiáng)版)

Java高并發(fā)核心編程 卷2:多線程、鎖、JMM、JUC、高并發(fā)設(shè)計(jì)模式(加強(qiáng)版)

定 價(jià):¥118.00

作 者: 尼恩
出版社: 清華大學(xué)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

ISBN: 9787302620983 出版時(shí)間: 2022-11-01 包裝: 平裝-膠訂
開本: 16開 頁數(shù): 字?jǐn)?shù):  

內(nèi)容簡介

  本書聚焦Java高并發(fā)編程基礎(chǔ)知識(shí),介紹Java多線程、線程池、內(nèi)置鎖、JMM、CAS、JUC、高并發(fā)設(shè)計(jì)模式等并發(fā)編程方面的核心原理和實(shí)戰(zhàn)知識(shí)。本書共10章。第1、2章剖析多線程、線程池的核心原理和實(shí)戰(zhàn)應(yīng)用,揭秘線程安全問題和Java內(nèi)置鎖的核心原理。第3、4章講解CAS原理與JUC原子類、JMM的核心原理,揭秘CAS操作的弊端和兩類規(guī)避措施,以及Java內(nèi)存可見性和volatile關(guān)鍵字的底層知識(shí)。第5章講解JUC顯式鎖的原理和各種顯式鎖的使用。第6章闡述JUC高并發(fā)的基礎(chǔ)設(shè)施——AQS抽象同步器的核心原理。第7章介紹JUC容器類。第8~10章介紹常見的Java高并發(fā)設(shè)計(jì)模式的原理和使用。本書既可以作為Java工程師、架構(gòu)師的編程參考書,又可以作為參加互聯(lián)網(wǎng)大廠面試、筆試的人員的學(xué)習(xí)參考書。

作者簡介

  尼恩中南大學(xué)碩士,資深系統(tǒng)架構(gòu)師、IT領(lǐng)域資深作家、著名博主、從業(yè)十余年,先后在華為、神州數(shù)碼等公司從事技術(shù)研發(fā)、架構(gòu)工作。長期專注于高性能Web平臺(tái)、高性能通信、高性能搜索、數(shù)據(jù)挖掘等領(lǐng)域的3高架構(gòu)研究、架構(gòu)實(shí)操、核心代碼開發(fā)工作,以及核心中間件、底層源碼研究工作,負(fù)責(zé)過多個(gè)億級(jí)RMB智慧城市平臺(tái)、大型政務(wù)平臺(tái)、數(shù)據(jù)中臺(tái)架構(gòu)、技術(shù)中臺(tái)架構(gòu)工作,發(fā)起的3高研究社群“瘋狂創(chuàng)客圈”目前有研究人員1100多人。唐歡計(jì)算機(jī)專業(yè)碩士,資深系統(tǒng)架構(gòu)師、資深博主,擁有多年Java開發(fā)和系統(tǒng)架構(gòu)經(jīng)驗(yàn),多年敏捷開發(fā)的項(xiàng)目管理經(jīng)驗(yàn),現(xiàn)在國內(nèi)科技企業(yè)擔(dān)任系統(tǒng)架構(gòu)師一職,主持企業(yè)軟件的系統(tǒng)架構(gòu)和產(chǎn)品研發(fā)工作。孫精科南京理工大學(xué)計(jì)算機(jī)專業(yè)碩士,上海交通大學(xué)EMBA。行業(yè)內(nèi)知名信息化系統(tǒng)專家,具有豐富的大型信息系統(tǒng)的研發(fā)及管理經(jīng)驗(yàn)。近10年來,主持上市公司信息系統(tǒng)建設(shè)、三維開發(fā)、通信協(xié)議轉(zhuǎn)換、數(shù)據(jù)采集、軟硬件一體化產(chǎn)品的研發(fā)。具有豐富的國際國內(nèi)項(xiàng)目咨詢經(jīng)驗(yàn),擔(dān)任多項(xiàng)省級(jí)項(xiàng)目負(fù)責(zé)人,主持的多個(gè)項(xiàng)目獲得省部級(jí)獎(jiǎng)項(xiàng);2003—2008年,在東南亞、中東、非洲、南美等地執(zhí)行國際咨詢項(xiàng)目。朱達(dá)華資深技術(shù)總監(jiān)、美國協(xié)會(huì)PMI項(xiàng)目管理師、敏捷教練。近10年來在一線主持技術(shù)管理工作,擅長系統(tǒng)架構(gòu)分析和設(shè)計(jì),負(fù)責(zé)過多個(gè)大型省市級(jí)系統(tǒng)建設(shè),服務(wù)數(shù)千萬的用戶。

圖書目錄


第1章  多線程原理與實(shí)戰(zhàn) 1
1.1  兩個(gè)技術(shù)面試故事 1
1.2  無處不在的進(jìn)程和線程 2
1.2.1  進(jìn)程的基本原理 3
1.2.2  線程的基本原理 4
1.2.3  進(jìn)程與線程的區(qū)別 7
1.3  創(chuàng)建線程的4種方法 7
1.3.1  Thread類詳解 8
1.3.2  創(chuàng)建一個(gè)空線程 10
1.3.3  線程創(chuàng)建方法一:繼承Thread類創(chuàng)建線程類 11
1.3.4  線程創(chuàng)建方法二:實(shí)現(xiàn)Runnable接口創(chuàng)建線程目標(biāo)類 12
1.3.5  優(yōu)雅創(chuàng)建Runnable線程目標(biāo)類的兩種方式 14
1.3.6  實(shí)現(xiàn)Runnable接口的方式創(chuàng)建線程目標(biāo)類的優(yōu)缺點(diǎn) 16
1.3.7  線程創(chuàng)建方法三:使用Callable和FutureTask創(chuàng)建線程 20
1.3.8  線程創(chuàng)建方法四:通過線程池創(chuàng)建線程 25
1.4  線程的核心原理 28
1.4.1  線程的調(diào)度與時(shí)間片 28
1.4.2  線程的優(yōu)先級(jí) 29
1.4.3  線程的生命周期 31
1.4.4  一個(gè)線程狀態(tài)的簡單演示案例 33
1.4.5  使用Jstack工具查看線程狀態(tài) 35
1.5  線程的基本操作 36
1.5.1  線程名稱的設(shè)置和獲取 36
1.5.2  線程的sleep操作 38
1.5.3  線程的interrupt操作 39
1.5.4  線程的join操作 42
1.5.5  線程的yield操作 46
1.5.6  線程的daemon操作 48
1.5.7  線程狀態(tài)總結(jié) 52
1.6  線程池原理與實(shí)戰(zhàn) 54
1.6.1  JUC的線程池架構(gòu) 54
1.6.2  Executors的4種快捷創(chuàng)建線程池的方法 56
1.6.3  線程池的標(biāo)準(zhǔn)創(chuàng)建方式 62
1.6.4  向線程池提交任務(wù)的兩種方式 63
1.6.5  線程池的任務(wù)調(diào)度流程 66
1.6.6  ThreadFactory(線程工廠) 68
1.6.7  任務(wù)阻塞隊(duì)列 70
1.6.8  調(diào)度器的鉤子方法 70
1.6.9  線程池的拒絕策略 72
1.6.10  線程池的優(yōu)雅關(guān)閉 75
1.6.11  Executors快捷創(chuàng)建線程池的潛在問題 80
1.7  確定線程池的線程數(shù) 83
1.7.1  按照任務(wù)類型對(duì)線程池進(jìn)行分類 83
1.7.2  為IO密集型任務(wù)確定線程數(shù) 84
1.7.3  為CPU密集型任務(wù)確定線程數(shù) 86
1.7.4  為混合型任務(wù)確定線程數(shù) 87
1.8  ThreadLocal原理與實(shí)戰(zhàn) 89
1.8.1  ThreadLocal的基本使用 89
1.8.2  ThreadLocal使用場景 91
1.8.3  使用ThreadLocal進(jìn)行線程隔離 92
1.8.4  使用ThreadLocal進(jìn)行跨函數(shù)數(shù)據(jù)傳遞 93
1.8.5  ThreadLocal內(nèi)部結(jié)構(gòu)演進(jìn) 94
1.8.6  ThreadLocal源碼分析 96
1.8.7  ThreadLocalMap源碼分析 99
1.8.8  ThreadLocal綜合使用案例 102
第2章  Java內(nèi)置鎖的核心原理 106
2.1  線程安全問題 106
2.1.1  自增運(yùn)算不是線程安全的 106
2.1.2  臨界區(qū)資源與臨界區(qū)代碼段 108
2.2  synchronized關(guān)鍵字 109
2.2.1  synchronized同步方法 110
2.2.2  synchronized同步塊 110
2.2.3  靜態(tài)的同步方法 112
2.3  生產(chǎn)者-消費(fèi)者問題 113
2.3.1  生產(chǎn)者-消費(fèi)者模式 113
2.3.2  一個(gè)線程不安全的實(shí)現(xiàn)版本 114
2.3.3  一個(gè)線程安全的實(shí)現(xiàn)版本 120
2.4  Java對(duì)象結(jié)構(gòu)與內(nèi)置鎖 121
2.4.1  Java對(duì)象結(jié)構(gòu) 121
2.4.2  Mark Word的結(jié)構(gòu)信息 124
2.4.3  使用JOL工具查看對(duì)象的布局 126
2.4.4  大小端問題 129
2.4.5  無鎖、偏向鎖、輕量級(jí)鎖和重量級(jí)鎖 131
2.5  偏向鎖的原理與實(shí)戰(zhàn) 132
2.5.1  偏向鎖的核心原理 132
2.5.2  偏向鎖的演示案例 133
2.5.3  偏向鎖的膨脹和撤銷 136
2.5.4  全局安全點(diǎn)原理和偏向鎖撤銷的性能問題 137
2.6  輕量級(jí)鎖的原理與實(shí)戰(zhàn) 139
2.6.1  輕量級(jí)鎖的核心原理 139
2.6.2  輕量級(jí)鎖的案例演示 141
2.6.3  輕量級(jí)鎖的分類 143
2.6.4  輕量級(jí)鎖的膨脹 144
2.7  重量級(jí)鎖的原理與實(shí)戰(zhàn) 144
2.7.1  重量級(jí)鎖的核心原理 144
2.7.2  重量級(jí)鎖的開銷 146
2.7.3  重量級(jí)鎖的演示案例 147
2.8  偏向鎖、輕量級(jí)鎖與重量級(jí)鎖的對(duì)比 149
2.9  線程間通信 150
2.9.1  線程間通信定義 150
2.9.2  低效的線程輪詢 150
2.9.3  wait方法、notify方法的原理 152
2.9.4  “等待-通知”通信模式演示案例 154
2.9.5  生產(chǎn)者-消費(fèi)者之間的線程間通信 156
2.9.6  需要在synchronized同步塊的內(nèi)部使用wait和notify 158
第3章  CAS原理與JUC原子類 160
3.1  什么是CAS 160
3.1.1  Unsafe類中的CAS方法 160
3.1.2  使用CAS進(jìn)行無鎖編程 162
3.1.3  使用無鎖編程實(shí)現(xiàn)輕量級(jí)安全自增 164
3.1.4  字段偏移量的計(jì)算 165
3.2  JUC原子類 167
3.2.1  JUC中的Atomic原子操作包 167
3.2.2  基礎(chǔ)原子類AtomicInteger 168
3.2.3  數(shù)組原子類AtomicIntegerArray 170
3.2.4  AtomicInteger線程安全原理 171
3.3  對(duì)象操作的原子性 173
3.3.1  引用類型原子類 173
3.3.2  屬性更新原子類 174
3.4  ABA問題 175
3.4.1  了解ABA問題 175
3.4.2  ABA問題解決方案 177
3.4.3  使用AtomicStampedReference解決ABA問題 177
3.4.4  使用AtomicMarkableReference解決ABA問題 179
3.5  提升高并發(fā)場景下CAS操作的性能 180
3.5.1  以空間換時(shí)間:LongAdder 181
3.5.2  LongAdder的原理 183
3.6  CAS在JDK中的廣泛應(yīng)用 189
3.6.1  CAS操作的弊端和規(guī)避措施 190
3.6.2  CAS操作在JDK中的應(yīng)用 191
第4章  可見性與有序性原理 192
4.1  CPU物理緩存結(jié)構(gòu) 192
4.2  并發(fā)編程的三大問題 194
4.2.1  原子性問題 194
4.2.2  可見性問題 195
4.2.3  有序性問題 196
4.3  硬件層的MESI協(xié)議原理 198
4.3.1  總線鎖和緩存鎖 199
4.3.2  MSI協(xié)議 201
4.3.3  MESI協(xié)議及RFO請(qǐng)求 201
4.3.4  Store Buffer和Invalidate Queue 206
4.3.5  volatile的原理 207
4.4  有序性與內(nèi)存屏障 209
4.4.1  重排序 210
4.4.2  As-if-Serial規(guī)則 211
4.4.3  硬件層面的內(nèi)存屏障 212
4.5  JMM詳解 214
4.5.1  什么是Java內(nèi)存模型 214
4.5.2  JMM與JMM物理內(nèi)存的區(qū)別 216
4.5.3  JMM的8個(gè)操作 218
4.5.4  JMM如何解決有序性問題 219
4.6  Happens-Before規(guī)則 222
4.6.1  Happens-Before規(guī)則介紹 222
4.6.2  規(guī)則1:順序性規(guī)則 223
4.6.3  規(guī)則2:volatile規(guī)則 223
4.6.4  規(guī)則3:傳遞性規(guī)則 225
4.6.5  規(guī)則4:監(jiān)視鎖規(guī)則 226
4.6.6  規(guī)則5:start()規(guī)則 227
4.6.7  規(guī)則6:join()規(guī)則 227
4.7  volatile語義中的內(nèi)存屏障 228
4.7.1  volatile寫操作的內(nèi)存屏障 229
4.7.2  volatile讀操作的內(nèi)存屏障 229
4.7.3  對(duì)volatile變量的寫入進(jìn)行性能優(yōu)化 230
4.8  volatile不具備原子性 232
4.8.1  volatile變量的自增實(shí)例 232
4.8.2  volatile變量的復(fù)合操作不具備原子性的原理 233
第5章  JUC顯式鎖的原理與實(shí)戰(zhàn) 235
5.1  顯式鎖 235
5.1.1  顯式鎖Lock接口 236
5.1.2  可重入鎖ReentrantLock 237
5.1.3  使用顯式鎖的模板代碼 239
5.1.4  基于顯式鎖進(jìn)行“等待-通知”方式的線程間通信 241
5.1.5  LockSupport 244
5.1.6  顯式鎖的分類 247
5.2  悲觀鎖和樂觀鎖 249
5.2.1  悲觀鎖存在的問題 249
5.2.2  通過CAS實(shí)現(xiàn)樂觀鎖 249
5.2.3  不可重入的自旋鎖 250
5.2.4  可重入的自旋鎖 251
5.2.5  CAS可能導(dǎo)致“總線風(fēng)暴” 252
5.2.6  CLH自旋鎖 254
5.3  公平鎖與非公平鎖 261
5.3.1  非公平鎖實(shí)戰(zhàn) 261
5.3.2  公平鎖實(shí)戰(zhàn) 262
5.4  可中斷鎖與不可中斷鎖 263
5.4.1  鎖的可中斷搶占 263
5.4.2  死鎖的監(jiān)測與中斷 265
5.5  獨(dú)占鎖與共享鎖 268
5.5.1  獨(dú)占鎖 268
5.5.2  共享鎖Semaphore 268
5.5.3  共享鎖CountDownLatch 271
5.6  讀寫鎖 273
5.6.1  讀寫鎖ReentrantReadWriteLock 273
5.6.2  鎖的升級(jí)與降級(jí) 275
5.6.3  StampedLock 276
第6章  AQS抽象同步器核心原理 280
6.1  鎖與隊(duì)列的關(guān)系 280
6.2  AQS的核心成員 282
6.2.1  狀態(tài)標(biāo)志位 282
6.2.2  隊(duì)列節(jié)點(diǎn)類 283
6.2.3  FIFO雙向同步隊(duì)列 284
6.2.4  JUC顯式鎖與AQS的關(guān)系 285
6.2.5  ReentrantLock與AQS的組合關(guān)系 285
6.3  AQS中的模板模式 287
6.3.1  模板模式 288
6.3.2  一個(gè)模板模式的參考實(shí)現(xiàn) 289
6.3.3  AQS的模板流程 291
6.3.4  AQS中的鉤子方法 291
6.4  通過AQS實(shí)現(xiàn)一把簡單的獨(dú)占鎖 292
6.4.1  簡單的獨(dú)占鎖的UML類圖 293
6.4.2  簡單的獨(dú)占鎖的實(shí)現(xiàn) 293
6.4.3  SimpleMockLock測試用例 295
6.5  AQS鎖搶占的原理 296
6.5.1  顯式鎖搶占的總體流程 296
6.5.2  AQS模板方法:acquire(arg) 297
6.5.3  鉤子實(shí)現(xiàn):tryAcquire(arg) 297
6.5.4  直接入隊(duì):addWaiter 297
6.5.5  自旋入隊(duì):enq 298
6.5.6  自旋搶占:acquireQueued() 299
6.5.7  掛起預(yù)判:shouldParkAfterFailedAcquire 300
6.5.8  線程掛起:parkAndCheckInterrupt() 302
6.6  AQS兩個(gè)關(guān)鍵點(diǎn):節(jié)點(diǎn)的入隊(duì)和出隊(duì) 302
6.6.1  節(jié)點(diǎn)的自旋入隊(duì) 303
6.6.2  節(jié)點(diǎn)的出隊(duì) 303
6.7  AQS鎖釋放的原理 304
6.7.1  SimpleMockLock獨(dú)占鎖的釋放流程 304
6.7.2  AQS模板方法:release() 305
6.7.3  鉤子實(shí)現(xiàn):tryRelease() 305
6.7.4  喚醒后驅(qū):unparkSuccessor() 306
6.8  ReentrantLock的搶鎖流程 306
6.8.1  ReentrantLock非公平鎖的搶占流程 307
6.8.2  非公平鎖的同步器子類 307
6.8.3  非公平搶占的鉤子方法:tryAcquire(arg) 308
6.8.4  ReentrantLock公平鎖的搶占流程 308
6.8.5  公平鎖的同步器子類 309
6.8.6  公平搶占的鉤子方法:tryAcquire(arg) 309
6.8.7  是否有后驅(qū)節(jié)點(diǎn)的判斷 310
6.9  AQS條件隊(duì)列 310
6.9.1  Condition基本原理 310
6.9.2  await()等待方法原理 312
6.9.3  signal()喚醒方法原理 313
6.9.4  節(jié)點(diǎn)入隊(duì)的時(shí)機(jī) 314
6.10  AQS的實(shí)際應(yīng)用 315
第7章  JUC容器類 316
7.1  線程安全的同步容器類 316
7.2  JUC高并發(fā)容器 318
7.3  CopyOnWriteArrayList 319
7.3.1  CopyOnWriteArrayList的使用 320
7.3.2  CopyOnWriteArrayList原理 321
7.3.3  CopyOnWriteArrayList讀取操作 322
7.3.4  CopyOnWriteArrayList寫入操作 323
7.3.5  CopyOnWriteArrayList的迭代器實(shí)現(xiàn) 323
7.4  BlockingQueue 324
7.4.1  BlockingQueue的特點(diǎn) 324
7.4.2  阻塞隊(duì)列的常用方法 325
7.4.3  常見的BlockingQueue 326
7.4.4  ArrayBlockingQueue的基本使用 328
7.4.5  ArrayBlockingQueue構(gòu)造器和成員 330
7.4.6  非阻塞式添加元素:add()、offer()方法的原理 332
7.4.7  阻塞式添加元素:put()方法的原理 333
7.4.8  非阻塞式刪除元素:poll()方法的原理 335
7.4.9  阻塞式刪除元素:take()方法的原理 335
7.4.10  peek()直接返回當(dāng)前隊(duì)列的隊(duì)首元素 337
7.5  ConcurrentHashMap 337
7.5.1  HashMap和HashTable的問題 337
7.5.2  JDK 1.7版本ConcurrentHashMap的結(jié)構(gòu) 338
7.5.3  JDK 1.7版本ConcurrentHashMap的核心原理 339
7.5.4  JDK 1.8版本ConcurrentHashMap的結(jié)構(gòu) 346
7.5.5  JDK 1.8版本ConcurrentHashMap的核心原理 347
7.5.6  JDK 1.8版本ConcurrentHashMap的核心源碼 350
第8章  高并發(fā)設(shè)計(jì)模式 353
8.1  線程安全的單例模式 353
8.1.1  從餓漢式單例到懶漢式單例 353
8.1.2  使用內(nèi)置鎖保護(hù)懶漢式單例 354
8.1.3  雙重檢查鎖方式 355
8.1.4  使用雙重檢查鎖 volatile 356
8.1.5  使用靜態(tài)內(nèi)部類實(shí)例懶漢單例模式 357
8.2  Master-Worker模式 357
8.2.1  Master-Worker模式的參考實(shí)現(xiàn) 358
8.2.2  Netty中的Master-Worker模式的實(shí)現(xiàn) 362
8.2.3  Nginx中的Master-Worker模式的實(shí)現(xiàn) 363
8.3  ForkJoin模式 364
8.3.1  ForkJoin模式的原理 364
8.3.2  ForkJoin框架 365
8.3.3  ForkJoin框架使用實(shí)戰(zhàn) 366
8.3.4  ForkJoin框架的核心API 367
8.3.5  工作竊取算法 370
8.3.6  ForkJoin框架的原理 371
8.4  生產(chǎn)者-消費(fèi)者模式 372
8.5  Future模式 373
第9章  異步回調(diào)模式 375
9.1  從泡茶的案例說起 375
9.2  join:異步阻塞之悶葫蘆 376
9.2.1  線程的合并流程 376
9.2.2  調(diào)用join()實(shí)現(xiàn)異步泡茶喝 376
9.2.3  join()方法詳解 377
9.3  FutureTask:異步調(diào)用之重武器 378
9.3.1  通過FutureTask獲取異步執(zhí)行結(jié)果的步驟 379
9.3.2  使用FutureTask實(shí)現(xiàn)異步泡茶喝 379
9.4  異步回調(diào)與異步阻塞調(diào)用 382
9.5  Guava的異步回調(diào)模式 383
9.5.1  詳解FutureCallback 383
9.5.2  詳解ListenableFuture 384
9.5.3  ListenableFuture異步任務(wù) 384
9.5.4  使用Guava實(shí)現(xiàn)泡茶喝的實(shí)例 385
9.5.5  Guava異步回調(diào)和Java異步調(diào)用的區(qū)別 388
9.6  Netty的異步回調(diào)模式 389
9.6.1  GenericFutureListener接口詳解 389
9.6.2  Netty的Future接口詳解 389
9.6.3  ChannelFuture的使用 390
9.6.4  Netty的出站和入站異步回調(diào) 390
9.7  異步回調(diào)模式小結(jié) 391
第10章  CompletableFuture異步回調(diào) 392
10.1  CompletableFuture詳解 392
10.1.1  CompletableFuture的UML類關(guān)系 392
10.1.2  CompletionStage接口 393
10.1.3  使用runAsync和supplyAsync創(chuàng)建子任務(wù) 393
10.1.4  設(shè)置的子任務(wù)回調(diào)鉤子 394
10.1.5  調(diào)用handle()方法統(tǒng)一處理異常和結(jié)果 396
10.1.6  線程池的使用 397
10.2  異步任務(wù)的串行執(zhí)行 398
10.2.1  thenApply()方法 398
10.2.2  thenRun()方法 399
10.2.3  thenAccept()方法 399
10.2.4  thenCompose()方法 400
10.2.5  4個(gè)任務(wù)串行方法的區(qū)別 401
10.3  異步任務(wù)的合并執(zhí)行 402
10.3.1  thenCombine()方法 402
10.3.2  runAfterBoth()方法 404
10.3.3  thenAcceptBoth()方法 404
10.3.4  allOf()等待所有的任務(wù)結(jié)束 405
10.4  異步任務(wù)的選擇執(zhí)行 405
10.4.1  applyToEither()方法 406
10.4.2  runAfterEither()方法 407
10.4.3  acceptEither()方法 407
10.5  CompletableFuture的綜合案例 408
10.5.1  使用CompletableFuture實(shí)現(xiàn)泡茶喝實(shí)例 408
10.5.2  使用CompletableFuture進(jìn)行多個(gè)RPC調(diào)用 410
10.5.3  使用RxJava模擬RPC異步回調(diào) 411
 

本目錄推薦

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