Java 異步編程實戰
內容描述
這是一部全面解析Java異步編程的著作,針對各種常見異步編程場景,從編程語言、開發框架等角度深入講解了異步編程的原理和方法。作者是淘寶的資深Java開發工程師,在Java異步編程、並發編程領域有深厚的積累。
全書共9章,每章內容概括如下:
第1~2章主要介紹了異步編程的概念、適用場景,以及如何使用線程和線程池來實現異步編程;
第3章首先講解JDK中的各種Future及其內部實現原理,然後講解如何使用Future實現異步編程,以及如何結合JDK8 Stream 和Future實現異步編程;
第4章講解了Spring框架提供的異步執行能力,包含在Spring中如何對TaskExecutor進行抽象,如何使用註解@Async實現異步編程等內容;
第5章講解了比較熱門的反應式編程相關的內容,包含什麽是反應式編程,如何使用反應式編程規範的庫RxJava和Reactor實現異步編程;
第6章講解了Web Servlet的異步非阻塞處理,包含Servlet 3.0規範是如何提供異步處理能力的,Servlet 3.1規範是如何解決IO阻塞問題的,以及在Spring MVC中如何進行異步處理。
第7章講解了與Servlet技術棧並行存在的、由Spring 5.0提出來的Spring WebFlux的異步非阻塞處理,包含Spring WebFlux的由來、Spring WebFlux的並發模型、兩種編程模型,以及如何使用Spring WebFlux來進行服務開發、Spring WebFlux的內部實現原理。
第8章簡要介紹了業界為方便實現異步編程而設計的一些框架和中間件,比如異步/基於事件驅動的網絡編程框架Netty、高性能RPC框架Apache Dubbo、高性能線程間消息傳遞庫Disruptor、異步/分佈式/基於事件驅動的編程框架Akka、高性能分佈式消息框架Apache RocketMQ 。
第9章介紹了新興的Go語言是如何從語言層面提供強大的異步編程能力的。
本書註重理論與實踐相結合,且每個異步技術點都附有代碼實例,以幫助讀者加深理解。
目錄大綱
前言
第1章認識異步編程1
1.1異步編程概念與作用1
1.2異步編程場景2
1.3總結9
第2章顯式使用線程和線程池實現異步編程10
2.1顯式使用線程實現異步編程10
2.2顯式使用線程池實現異步編程14
2.2.1如何顯式使用線程池實現異步編程14
2.2.2線程池ThreadPoolExecutor原理剖析17
2.3總結34
第3章基於JDK中的Future實現異步編程35
3.1 JDK中的Future35
3.2 JDK中的FutureTask37
3.2.1 FutureTask概述37
3.2.2 FutureTask的類圖結構41
3.2.3 FutureTask的run()方法45
3.2.4 FutureTask的get()方法48
3.2.5 FutureTask的cancel(boolean mayInterruptIfRunning)方法50
3.2.6 FutureTask的局限性52
3.3 JDK中的CompletableFuture52
3.3.1 CompletableFuture概述52
3.3.2顯式設置CompletableFuture結果54
3.3.3基於CompletableFuture實現異步計算與結果轉換56
3.3.4多個CompletableFuture進行組合運算65
3.3.5異常處理68
3.3. 6 CompletableFuture概要原理70
3.4 JDK8 Stream & CompletableFuture76
3.4.1 JDK8 Stream76
3.4.2當Stream遇見CompletableFuture79
3.5總結81
第4章Spring框架中的異步執行82
4.1 Spring中對TaskExecutor的抽象82
4.2如何在Spring中使用異步執行84
4.2.1使用TaskExecutor實現異步執行84
4.2.2使用註解@Async實現異步執行89
4.3 @Async註解異步執行原理96
4.4總結109
第5章基於反應式編程實現異步編程110
5.1反應式編程概述110
5.2 Reactive Streams規範120
5.3基於RxJava實現異步編程123
5.4基於Reactor實現異步編程133
5.5總結136
第6章Web Servlet的異步非阻塞處理137
6.1 Servlet概述137
6.2 Servlet 3.0提供的異步處理能力138
6.3 Servlet 3.1提供的非阻塞IO能力145
6.4 Spring Web MVC的異步處理能力153
6.4.1基於DeferredResult的異步處理154
6.4.2基於Callable實現異步處理155
6.5總結157
第7章Spring WebFlux的異步非阻塞處理158
7.1 Spring WebFlux概述158
7.2 Reactive編程& Reactor庫159
7.3 WebFlux服務器160
7.4 WebFlux的並發模型163
7.5 WebFlux對性能的影響164
7.6 WebFlux的編程模型164
7.6.1 WebFlux註解式編程模型165
7.6.2 WebFlux函數式編程模型168
7.7 WebFlux原理淺嚐171
7.7.1 Reactor Netty概述171
7.7.2 WebFlux服務器啟動流程173
7.7.3 WebFlux一次服務調用流程182
7.8 WebFlux的適用場景185
7.9總結186
第8章高性能異步編程框架和中間件187
8.1異步、基於事件驅動的網絡編程框架—Netty187
8.1.1 Netty概述187
8.1.2 Netty的線程模型190
8.1.3 TCP半包與粘包問題196
8.1.4基於Netty與CompletableFuture實現RPC異步調用198
8.2高性能RPC框架—Apache Dubbo209
8.2.1 Apache Dubbo概述209
8.2.2 Dubbo的異步調用210
8.2.3 Dubbo的異步執行214
8.3高性能線程間消息傳遞庫—Disruptor217
8.3.1 Disruptor概述217
8.3.2 Disruptor的特性詳解220
8.3.3基於Disruptor實現異步編程223
8.4異步、分佈式、基於消息驅動的框架—Akka227
8.4.1 Akka概述227
8.4.2傳統編程模型存在的問題228
8.4.3 Actor模型解決了傳統編程模型的問題232
8.4.4基於Akka實現異步編程237
8.5高性能分佈式消息框架—Apache RocketMQ244
8.5.1 Apache RocketMQ概述244
8.5.2基於Apache RocketMQ實現系統間異步解耦246
8.6總結254
第9章Go語言的異步編程能力255
9.1 Go語言概述255
9.2 Go語言的線程模型256
9.2.1一對一模型256
9.2.2多對一模型257
9.2.3多對多模型258
9.2.4 Go語言的線程模型259
9.3 goroutine與channel261
9.3.1 goroutine261
9.3.2 channel265
9.3.3構建管道實現異步編程269
9.4總結273
作者介紹
翟陸續(花名:加多)
資深Java技術工程師,就職於淘寶,有多年的Java研發經驗,在Java並發編程、異步編程等方面有深入研究和積累。對JUC包源碼有深入的理解,熟悉常用開源框架實現原理。
著有暢銷書《Java並發編程之美》。