[套装书]Java异步编程实战+Java并发编程的艺术(2册)

作者
翟陆续方腾飞 魏鹏 程晓明
丛书名
Java核心技术系列
出版社
机械工业出版社
ISBN
9781912231540
简要
简介
内容简介书籍计算机书籍 ---------------------------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技术栈并行存在的、由Spring5.0提出来的Spring WebFlux的异步非阻塞处理,包含Spring WebFlux的由来、Spring WebFlux的并发模型、两种编程模型,以及如何使用Spring WebFlux来进行服务开发、Spring WebFlux内部的实现原理。 第8章简要介绍了业界为方便实现异步编程而设计的一些框架和中间件,比如异步基于事件驱动的网络编程框架Netty,高性能RPC框架Apache Dubbo,高性能线程间消息传递库Disruptor,异步基、分布式、基于事件驱动的编程框架Akka,高性能分布式消息平台Apache RocketMQ 。 第9章介绍新兴的Go语言是如何从语言层面提供了强大的异步编程能力的。 本书注重理论与实践相结合,且每个异步技术点都附有代码实例,帮助读者加深理解。 . ---------------------------Java并发编程的艺术--------------------------- 并发编程领域的扛鼎之作,作者是阿里和1号店的资深Java技术专家,对并发编程有非常深入的研究,本书是他们多年一线开发经验的结晶。本书的部分内容在出版早期发表在Java并发编程网和帅foQ等技术社区,得到了非常高的评价。它选取了Java并发编程中最核心的技术进行讲解,从JDK源码、JVM、CPU等多角度全面剖析和讲解了Java并发编程的框架、工具、原理和方法,对Java并发编程进行了最为深入和透彻的阐述。 内容涵盖Java并发编程机制的底层实现原理、Java内存模型、Java并发编程基础、Java中的锁、并发容器和框架、原子类、并发工具类、线程池、Executor框架等主题,每个主题都做了深入的讲解,同时通过实例介绍了如何应用这些技术。
目录



---------------------------Java异步编程实战---------------------------


前言
第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并发编程的艺术---------------------------


前 言
第1章 并发编程的挑战 1
1.1 上下文切换 1
1.1.1 多线程一定快吗 1
1.1.2 测试上下文切换次数和时长 3
1.1.3 如何减少上下文切换 3
1.1.4 减少上下文切换实战 4
1.2 死锁 5
1.3 资源限制的挑战 6
1.4 本章小结 7
第2章 Java并发机制的底层实现原理 8
2.1 volatile的应用 8
2.2 synchronized的实现原理与应用 11
2.2.1 Java对象头 12
2.2.2 锁的升级与对比 13
2.3 原子操作的实现原理 16
2.4 本章小结 20
第3章 Java内存模型 21
3.1 Java内存模型的基础 21
3.1.1 并发编程模型的两个关键问题 21
3.1.2 Java内存模型的抽象结构 22
3.1.3 从源代码到指令序列的重排序 23
3.1.4 并发编程模型的分类 24
3.1.5 happens-before简介 26
3.2 重排序 27
3.2.1 数据依赖性 28
3.2.2 as-if-serial语义 28
3.2.3 程序顺序规则 29
3.2.4 重排序对多线程的影响 29
3.3 顺序一致性 31
3.3.1 数据竞争与顺序一致性 31
3.3.2 顺序一致性内存模型 32
3.3.3 同步程序的顺序一致性效果 34
3.3.4 未同步程序的执行特性 35
3.4 volatile的内存语义 38
3.4.1 volatile的特性 38
3.4.2 volatile写-读建立的happens-before关系 39
3.4.3 volatile写-读的内存语义 40
3.4.4 volatile内存语义的实现 42
3.4.5 JSR-133为什么要增强volatile的内存语义 46
3.5 锁的内存语义 47
3.5.1 锁的释放-获取建立的 happens-before关系 47
3.5.2 锁的释放和获取的内存语义 48
3.5.3 锁内存语义的实现 50
3.5.4 concurrent包的实现 54
3.6 final域的内存语义 55
3.6.1 final域的重排序规则 55
3.6.2 写final域的重排序规则 56
3.6.3 读final域的重排序规则 57
3.6.4 final域为引用类型 58
3.6.5 为什么final引用不能从构造函数内“溢出” 59
3.6.6 final语义在处理器中的实现 61
3.6.7 JSR-133为什么要增强final的语义 62
3.7 happens-before 62
3.7.1 JMM的设计 62
3.7.2 happens-before的定义 64
3.7.3 happens-before规则 65
3.8 双重检查锁定与延迟初始化 67
3.8.1 双重检查锁定的由来 67
3.8.2 问题的根源 69
3.8.3 基于volatile的解决方案 71
3.8.4 基于类初始化的解决方案 72
3.9 Java内存模型综述 78
3.9.1 处理器的内存模型 78
3.9.2 各种内存模型之间的关系 80
3.9.3 JMM的内存可见性保证 80
3.9.4 JSR-133对旧内存模型的修补 81
3.10 本章小结 82
第4章 Java并发编程基础 83
4.1 线程简介 83
4.1.1 什么是线程 83
4.1.2 为什么要使用多线程 84
4.1.3 线程优先级 85
4.1.4 线程的状态 87
4.1.5 Daemon线程 90
4.2 启动和终止线程 91
4.2.1 构造线程 91
4.2.2 启动线程 92
4.2.3 理解中断 92
4.2.4 过期的suspend()、resume()和stop() 93
4.2.5 安全地终止线程 95
4.3 线程间通信 96
4.3.1 volatile和synchronized关键字 96
4.3.2 等待/通知机制 98
4.3.3 等待/通知的经典范式 101
4.3.4 管道输入/输出流 102
4.3.5 Thread.join()的使用 103
4.3.6 ThreadLocal的使用 105
4.4 线程应用实例 106
4.4.1 等待超时模式 106
4.4.2 一个简单的数据库连接池示例 106
4.4.3 线程池技术及其示例 110
4.4.4 一个基于线程池技术的简单Web服务器 114
4.5 本章小结 118
第5章 Java中的锁 119
5.1 Lock接口 119
5.2 队列同步器 121
5.2.1 队列同步器的接口与示例 121
5.2.2 队列同步器的实现分析 124
5.3 重入锁 136
5.4 读写锁 140
5.4.1 读写锁的接口与示例 141
5.4.2 读写锁的实现分析 142
5.5 LockSupport工具 146
5.6 Condition接口 147
5.6.1 Condition接口与示例 148
5.6.2 Condition的实现分析 150
5.7 本章小结 154
第6章 Java并发容器和框架 155
6.1 ConcurrentHashMap的实现原理与使用 155
6.1.1 为什么要使用ConcurrentHashMap 155
6.1.2 ConcurrentHashMap的结构 156
6.1.3 ConcurrentHashMap的初始化 157
6.1.4 定位Segment 159
6.1.5 ConcurrentHashMap的操作 160
6.2 ConcurrentLinkedQueue 161
6.2.1 ConcurrentLinkedQueue的结构 162
6.2.2 入队列 162
6.2.3 出队列 165
6.3 Java中的阻塞队列 167
6.3.1 什么是阻塞队列 167
6.3.2 Java里的阻塞队列 168
6.3.3 阻塞队列的实现原理 172
6.4 Fork/Join框架 175
6.4.1 什么是Fork/Join框架 175
6.4.2 工作窃取算法 176
6.4.3 Fork/Join框架的设计 177
6.4.4 使用Fork/Join框架 177
6.4.5 Fork/Join框架的异常处理 179
6.4.6 Fork/Join框架的实现原理 179
6.5 本章小结 181
第7章 Java中的13个原子操作类 182
7.1 原子更新基本类型类 182
7.2 原子更新数组 184
7.3 原子更新引用类型 185
7.4 原子更新字段类 187
7.5 本章小结 188
第8章 Java中的并发工具类 189
8.1 等待多线程完成的CountDownLatch 189
8.2 同步屏障CyclicBarrier 191
8.2.1 CyclicBarrier简介 191
8.2.2 CyclicBarrier的应用场景 193
8.2.3 CyclicBarrier和CountDownLatch的区别 195
8.3 控制并发线程数的Semaphore 196
8.4 线程间交换数据的Exchanger 198
8.5 本章小结 199
第9章 Java中的线程池 200
9.1 线程池的实现原理 200
9.2 线程池的使用 203
9.2.1 线程池的创建 203
9.2.2 向线程池提交任务 205
9.2.3 关闭线程池 205
9.2.4 合理地配置线程池 206
9.2.5 线程池的监控 206
9.3 本章小结 207
第10章 Executor框架 208
10.1 Executor框架简介 208
10.1.1 Executor框架的两级调度模型 208
10.1.2 Executor框架的结构与成员 208
10.2 ThreadPoolExecutor详解 213
10.2.1 FixedThreadPool详解 213
10.2.2 SingleThreadExecutor详解 214
10.2.3 CachedThreadPool详解 215
10.3 ScheduledThreadPoolExecutor详解 217
10.3.1 ScheduledThreadPoolExecutor的运行机制 217
10.3.2 ScheduledThreadPoolExecutor的实现 218
10.4 FutureTask详解 221
10.4.1 FutureTask简介 222
10.4.2 FutureTask的使用 222
10.4.3 FutureTask的实现 224
10.5 本章小结 227
第11章 Java并发编程实践 228
11.1 生产者和消费者模式 228
11.1.1 生产者消费者模式实战 229
11.1.2 多生产者和多消费者场景 231
11.1.3 线程池与生产消费者模式 234
11.2 线上问题定位 234
11.3 性能测试 236
11.4 异步任务池 238
11.5 本章小结 240



有问题微信扫码联系

推荐

Understand China
桂ICP备20004708号-4