第1章 Java多线程基础 1
1.1 初识线程 2
1.1.1 线程是什么? 2
1.1.2 单线程与多线程 4
1.1.3 多线程的优势 5
1.1.4 守护线程与用户线程 7
1.2 Java线程的创建方法 8
1.2.1 继承Thread类创建线程 8
1.2.2 实现Runnable接口创建线程 10
1.2.3 实现Callable接口创建线程 12
1.2.4 三种线程创建方法的对比 15
1.3 搭建集成开发环境运行Java多线程 18
1.3.1 安装Java 8 19
1.3.2 环境变量的配置与测试 20
1.3.3 下载与安装IntelliJ IDEA 21
1.3.4 使用IntelliJ IDEA编写Java多线程 22
第2章 线程的生命周期 24
2.1 线程的状态 25
2.1.1 线程的六种状态 25
2.1.2 线程状态的获取方法 29
2.1.3 线程的活动情况获取方法 31
2.2 线程的生命周期 33
2.2.1 线程的生命周期图谱 33
2.2.2 线程的生命周期图谱分析一:新建和可运行中的就绪 34
2.2.3 线程的生命周期图谱分析二:可运行和阻塞 35
2.2.4 线程的生命周期图谱分析三:等待与恢复 38
2.2.5 线程的终止与关闭 39
2.3 多线程的优先级 40
2.3.1 线程的优先级范围 40
2.3.2 设置线程的优先级 41
2.3.3 多线程下的线程优先级体现 42
2.3.4 守护线程的运行 43
第3章 多线程的调度方式 49
3.1 多线程的调度概述 50
3.1.1 操作系统的调度原理 50
3.1.2 抢占式调度 51
3.1.3 非抢占式调度 51
3.1.4 多线程的上下文环境切换 52
3.2 线程的睡眠、等待与让步 52
3.2.1 线程的sleep()方法 53
3.2.2 线程的wait()方法 53
3.2.3 线程的yield()方法 56
3.2.4 wait()方法与sleep()方法的对比 58
3.3 多线程的唤醒 60
3.3.1 线程的notify()方法 60
3.3.2 多线程的notifyAll()方法 62
3.4 多线程的插队 62
3.4.1 线程的join()方法 63
3.4.2 调大线程的优先级 64
3.4.3 线程安全与线程不安全的表现 66
第4章 多线程的线程组与线程池 71
4.1 线程组 72
4.1.1 什么是线程组 72
4.1.2 线程组的创建与使用 73
4.2 线程池 79
4.2.1 什么是线程池 79
4.2.2 线程池的实现原理 80
4.2.3 线程池的创建与使用 90
4.3 多线程管理 93
4.3.1 多线程管理常用方法 94
4.3.2 多线程的监控 94
第5章 多线程的异常处理 97
5.1 异常的基本概念 98
5.1.1 Exception与Error 98
5.1.2 异常的抛出 98
5.2 Java中的异常处理 100
5.2.1 异常处理的一般形式:try-catch 100
5.2.2 使用finally进行最后处理 102
5.3 Java多线程的异常 103
5.3.1 常见的多线程异常 103
5.3.2 Future的get()方法获取异常 106
5.3.3 多线程的安全关闭 107
5.4 自定义多线程异常处理 109
5.4.1 创建切合业务的自定义线程异常处理类 109
5.4.2 捕获多线程运行时的自定义异常 110
第6章 多线程定时任务TimerTask 112
6.1 定时任务 113
6.1.1 初识定时任务 113
6.1.2 Java的定时器Timer类 114
6.1.3 Java的定时器任务TimerTask抽象类 116
6.2 多线程定时任务 118
6.2.1 创建多个任务 118
6.2.2 ScheduledExecutorService运行多任务 119
6.2.3 其他常见Java定时任务调度框架简介 121
第7章 多线程并发处理 122
7.1 多线程的并发基础 123
7.1.1 多线程的原子性 123
7.1.2 多线程的内存可见性 127
7.1.3 多线程的避免指令重排序 131
7.2 Java的多线程的同步 133
7.2.1 什么是同步 133
7.2.2 synchronized关键字 134
7.2.3 volatile关键字 139
7.2.4 多线程的同步锁机制 139
7.2.5 多线程的死锁和活锁 139
7.3 多线程的异步 144
7.3.1 什么是异步 144
7.3.2 生产者/消费者 144
7.3.3 多线程的同步与异步的比较 147
7.4 多线程的并发处理工具 149
7.4.1 多线程计数器CountDownLatch 150
7.4.2 信号量Semaphore 151
7.4.3 ThreadLocal多线程并发的变量隔离 153
7.4.4 多线程数据交换Exchanger 155
第8章 批处理Spring Batch与多线程 157
8.1 Spring Batch概述 158
8.1.1 Spring Batch的基本组件 158
8.1.2 Job的实例及各组件间的关系 158
8.1.3 Spring Batch的配置 159
8.1.4 Job的注解与配置 160
8.2 Spring Batch的监听机制 164
8.2.1 Spring Batch监听器 164
8.2.2 创建Spring Batch的监听器 165
8.2.3 为Job加入监听器 166
8.3 Spring Batch的事务处理机制 167
8.3.1 Spring Batch的事务简介 167
8.3.2 Spring Batch的事务配置 168
8.3.3 Spring Batch的事务使用 169
8.3.4 其他代码讲解 173
8.4 Spring Batch与多线程 177
8.4.1 Spring Batch的容错机制 177
8.4.2 Spring Batch Job的加速执行 179
8.4.3 Spring Batch Step的多线程设置 180
第9章 大数据任务调度框架Quartz与多线程 181
9.1 Quartz概述 182
9.1.1 强大的开源Java定时任务调度框架 182
9.1.2 Quartz的基本组件 182
9.1.3 Quartz与JavaTimer对比 182
9.2 Quartz的持久化 183
9.2.1 Quartz的数据库建表分析 183
9.2.2 Java项目引入Quartz的持久化配置 188
9.2.3 实例化Quartz 189
9.3 Quartz中的多线程设置 189
9.3.1 创建Job 190
9.3.2 设置策略 192
9.3.3 多线程的Job运行 196
9.3.4 Job的状态监控 201
9.3.5 Quartz的数据清除 203
第10章 大数据中间件Kafka与多线程 206
10.1 大数据中间件Kafka概述 207
10.1.1 什么是中间件 207
10.1.2 消息中间件 208
10.1.3 大数据消息中间件Kafka 208
10.2 Kafka的组件 209
10.2.1 Broker 209
10.2.2 Topic 209
10.2.3 Partition 210
10.2.4 Segment 211
10.2.5 Offset 211
10.3 Kafka的高可用方案 212
10.3.1 Kafka集群 212
10.3.2 Kafka的复制副本策略 212
10.3.3 Kafka副本的分布与数据恢复 213
10.4 Kafka的安装与配置 213
10.4.1 分布式Zookeeper 214
10.4.2 单机版Kafka搭建 214
10.4.3 集群版Kafka搭建 216
10.5 Kafka的多线程 219
10.5.1 Kafka的消息消费 220
10.5.2 Kafka的多线程分析 221
10.5.3 Kafka的消费负载均衡 224
第11章 多线程实战训练 225
11.1 多线程模拟交通信号灯 226
11.2 多线程处理多文件上传 235
11.3 多线程加速数据获取 251
11.4 大数据消息中心的设计 264