●前言
章認識異步編程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.1JDK 中的Future35
3.2JDK中的FutureTask37
3.2.1FutureTask 概述37
3.2.2FutureTask的類圖結構41
3.2.3FutureTask的run() 方法45
3.2.4FutureTask的get()方法48
3.2.5FutureTask的cancel(boolean mayInterruptIfRunning)方法50
3.2.6FutureTask的局限性52
3.3JDK中的CompletableFuture52
3.3.1CompletableFuture 概述52
3.3.2顯式設置CompletableFuture結果54
3.3.3基於CompletableFuture實現異步計算與結果轉換56
3.3.4多個CompletableFuture進行組合運算65
3.3.5異常處理68
3.3.6CompletableFuture概要原理70
3.4JDK8 Stream & CompletableFuture76
3.4.1JDK8 Stream76
3.4.2當Stream遇見CompletableFuture79
3.5總結81
第4章Spring框架中的異步執行82
4.1Spring中對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.2Reactive Streams規範120
5.3基於RxJava實現異步編程123
5.4基於Reactor實現異步編程133
5.5總結136
第6章Web Servlet的異步非阻塞處理137
6.1Servlet概述137
6.2Servlet 3.0 提供的異步處理能力138
6.3Servlet 3.1 提供的非阻塞IO能力145
6.4Spring Web MVC 的異步處理能力153
6.4.1基於DeferredResult的異步處理154
6.4.2基於Callable實現異步處理155
6.5總結157
第7章Spring WebFlux的異步非阻塞處理158
7.1Spring WebFlux概述158
7.2Reactive編程 & Reactor庫159
7.3WebFlux服務器160
7.4WebFlux的並發模型163
7.5WebFlux對性能的影響164
7.6WebFlux的編程模型164
7.6.1WebFlux注解式編程模型165
7.6.2WebFlux函數式編程模型168
7.7WebFlux原理淺嘗171
7.7.1Reactor Netty概述171
7.7.2WebFlux服務器啟動流程173
7.7.3WebFlux一次服務調用流程182
7.8WebFlux的適用場景185
7.9總結186
第8章高性能異步編程框架和中間件187
8.1異步、基於事件驅動的網絡編程框架——Netty187
8.1.1Netty概述187
8.1.2Netty的線程模型190
8.1.3TCP半包與粘包問題196
8.1.4基於Netty與CompletableFuture實現RPC異步調用198
8.2高性能RPC框架——Apache Dubbo209
8.2.1Apache Dubbo概述209
8.2.2Dubbo的異步調用210
8.2.3Dubbo的異步執行214
8.3高性能線程間消息傳遞庫——Disruptor217
8.3.1Disruptor概述217
8.3.2Disruptor的特性詳解220
8.3.3基於Disruptor實現異步編程223
8.4異步、分布式、基於消息驅動的框架——Akka227
8.4.1Akka概述227
8.4.2傳統編程模型存在的問題228
8.4.3Actor模型解決了傳統編程模型的問題232
8.4.4基於Akka實現異步編程237
8.5高性能分布式消息框架——Apache RocketMQ244
8.5.1Apache RocketMQ概述244
8.5.2基於Apache RocketMQ實現繫統間異步解耦246
8.6總結254
第9章Go語言的異步編程能力255
9.1Go語言概述255
9.2Go語言的線程模型256
9.2.1一對一模型256
9.2.2多對一模型257
9.2.3多對多模型258
9.2.4Go語言的線程模型259
9.3goroutine與channel261
9.3.1goroutine261
9.3.2channel265
9.3.3構建管道實現異步編程269
9.4總結273
內容簡介
異步編程是可以讓程序並行運行的一種手段,可以讓程序中的一個與主應用程序線程分開獨立運行,進而提高應用程序的性能和響應能力等。雖然Java為不同技術域提供了相應的異步編程技術,但是這些異步編程技術被散落到不同技術域的技術文檔中,沒有一個統一的文檔對其進行梳理歸納。另外這些技術之間是什麼關繫,各自的出現都是為了解決什麼問題,我們也很難找到相關資料來解釋。本書的出現則是為了打破這種局面,旨在對Java中相關的異步編程技術進行歸納總結,為讀者提供一個統一文檔來查閱、參考。
為何寫作本書異步編程是可以讓程序並行運行的一種手段,可以讓程序中的一個與主應用程序線程分開獨立運行,進而提高應用程序的性能和響應能力等。雖然Java為不同技術域提供了相應的異步編程技術,但是這些異步編程技術被散落到不同技術域的技術文檔中,沒有一個統一的文檔對其進行梳理歸納。另外這些技術之間是什麼關繫,各自的出現都是為了解決什麼問題,我們也很難找到相關資料來解釋。本書的出現則是為了打破這種局面,旨在對Java中相關的異步編程技術進行歸納總結,為讀者提供一個統一文檔來查閱、參考。本書特色本書涵蓋了Java中常見的異步編程場景,包括單JVM內的異步編程、跨主機通過網絡通信的遠程過程調用的異步調用與異步處理,以及Web請求的異步處理等。本書在講解Java中每種異步編程技術時都附有案例,以理論與實踐相結合的方式,幫助讀者更好地掌握相關內容。書中在講解每種異步編程技術時多會對其實現原理進行講解......
"