第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中的Future 35
3.2 JDK中的FutureTask 37
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中的CompletableFuture 52
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 & CompletableFuture 76
3.4.1 JDK8 Stream 76
3.4.2 当Stream遇见CompletableFuture 79
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 异步、基于事件驱动的网络编程框架——Netty 187
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 Dubbo 209
8.2.1 Apache Dubbo概述 209
8.2.2 Dubbo的异步调用 210
8.2.3 Dubbo的异步执行 214
8.3 高性能线程间消息传递库——Disruptor 217
8.3.1 Disruptor概述 217
8.3.2 Disruptor的特性详解 220
8.3.3 基于Disruptor实现异步编程 223
8.4 异步、分布式、基于消息驱动的框架——Akka 227
8.4.1 Akka概述 227
8.4.2 传统编程模型存在的问题 228
8.4.3 Actor模型解决了传统编程模型的问题 232
8.4.4 基于Akka实现异步编程 237
8.5 高性能分布式消息框架——Apache RocketMQ 244
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与channel 261
9.3.1 goroutine 261
9.3.2 channel 265
9.3.3 构建管道实现异步编程 269
9.4 总结 273