Java高并发核心编程卷2:多线程、锁、JMM、JUC、高并发设pdf下载pdf下载

Java高并发核心编程卷2:多线程、锁、JMM、JUC、高并发设百度网盘pdf下载

作者:
简介:本篇主要提供Java高并发核心编程卷2:多线程、锁、JMM、JUC、高并发设pdf下载
出版社:互动创新图书专营店
出版时间:
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

5b62b57bNd3cb9f8a.png
 书名:  Java高并发核心编程 卷2:多线程、锁、JMM、JUC、高并发设计模式|8080137
 图书定价: 129元
 图书作者: 尼恩
 出版社:  机械工业出版社
 出版日期:  2021/4/21 0:00:00
 ISBN号: 9787111679882
 开本: 16开
 页数: 484
 版次: 1-1
 内容简介
本书聚焦Java并发编程基础知识,介绍了Java多线程、线程池、内置锁、JMM、CAS、JUC、高并发设计模式等并发编程方面的核心原理和实战知识。
本书共分为10章。第1~2章浅显易懂地剖析多线程、线程池的核心原理和实战使用,揭秘线程安全问题和Java内置锁的核心原理;第3~4章细致地讲解CAS原理与JUC原子类、JMM的核心原理,揭秘CAS操作的弊端和两类规避措施、解密Java如何内存可见性和volatile关键字的底层知识;第5章细致地介绍JUC显示锁的原理和各种显示锁的使用;第6章图文并茂、深入浅出地阐述JUC高并发的基础设施:AQS抽象同步器核心原理;第7章介绍JUC容器类;第8~10章介绍常见的Java高并发设计模式的原理和使用。

 目录

前言
自序
第1章 多线程原理与实战1
1.1 两个技术面试故事1
1.2 无处不在的进程和线程2
1.2.1 进程的基本原理3
1.2.2 线程的基本原理5
1.2.3 进程与线程的区别8
1.3 创建线程的4种方法8
1.3.1 Thread类详解8
1.3.2 创建一个空线程10
1.3.3 线程创建方法一:继承Thread类创建线程类12
1.3.4 线程创建方法二:实现Runnable接口创建线程目标类13
1.3.5 优雅创建Runnable线程目标类的两种方式16
1.3.6 通过实现Runnable接口的方式创建线程目标类的优缺点18
1.3.7 线程创建方法三:使用Callable和FutureTask创建线程23
1.3.8 线程创建方法四:通过线程池创建线程28
1.4 线程的核心原理31
1.4.1 线程的调度与时间片31
1.4.2 线程的优先级32
1.4.3 线程的生命周期35
1.4.4 一个线程状态的简单演示案例37
1.4.5 使用Jstack工具查看线程状态40
1.5 线程的基本操作41
1.5.1 线程名称的设置和获取41
1.5.2 线程的sleep操作43
1.5.3 线程的interrupt操作45
1.5.4 线程的join操作48
1.5.5 线程的yield操作53
1.5.6 线程的daemon操作55
1.5.7 线程状态总结61
1.6 线程池原理与实战62
1.6.1 JUC的线程池架构63
1.6.2 Executors的4种快捷创建线程池的方法65
1.6.3 线程池的标准创建方式72
1.6.4 向线程池提交任务的两种方式73
1.6.5 线程池的任务调度流程77
1.6.6 ThreadFactory(线程工厂)79
1.6.7 任务阻塞队列81
1.6.8 调度器的钩子方法82
1.6.9 线程池的拒绝策略84
1.6.10 线程池的优雅关闭87
1.6.11 Executors快捷创建线程池的潜在问题93
1.7 确定线程池的线程数97
1.7.1 按照任务类型对线程池进行分类97
1.7.2 为IO密集型任务确定线程数98
1.7.3 为CPU密集型任务确定线程数100
1.7.4 为混合型任务确定线程数101
1.8 ThreadLocal原理与实战104
1.8.1 ThreadLocal的基本使用104
1.8.2 ThreadLocal的使用场景107
1.8.3 使用ThreadLocal进行线程隔离108
1.8.4 使用ThreadLocal进行跨函数数据传递109
1.8.5 ThreadLocal内部结构演进110
1.8.6 ThreadLocal源码分析111
1.8.7 ThreadLocalMap源码分析114
1.8.8 ThreadLocal综合使用案例119
第2章 Java内置锁的核心原理123
2.1 线程安全问题123
2.1.1 自增运算不是线程安全的123
2.1.2 临界区资源与临界区代码段126
2.2 synchronized关键字127
2.2.1 synchronized同步方法127
2.2.2 synchronized同步块128
2.2.3 静态的同步方法130
2.3 生产者-消费者问题131
2.3.1 生产者-消费者模式131
2.3.2 一个线程不安全的实现版本132
2.3.3 一个线程安全的实现版本139
2.4 Java对象结构与内置锁140
2.4.1 Java对象结构141
2.4.2 Mark Word的结构信息143
2.4.3 使用JOL工具查看对象的布局145
2.4.4 大小端问题149
2.4.5 无锁、偏向锁、轻量级锁和重量级锁150
2.5 偏向锁的原理与实战152
2.5.1 偏向锁的核心原理152
2.5.2 偏向锁的演示案例152
2.5.3 偏向锁的膨胀和撤销156
2.6 轻量级锁的原理与实战157
2.6.1 轻量级锁的核心原理157
2.6.2 轻量级锁的演示案例158
2.6.3 轻量级锁的分类161
2.6.4 轻量级锁的膨胀162
2.7 重量级锁的原理与实战162
2.7.1 重量级锁的核心原理162
2.7.2 重量级锁的开销165
2.7.3 重量级锁的演示案例166
2.8 偏向锁、轻量级锁与重量级锁的对比169
2.9 线程间通信170
2.9.1 线程间通信的定义170
2.9.2 低效的线程轮询170
2.9.3 wait方法和notify方法的原理171
2.9.4 “等待-通知”通信模式演示案例174
2.9.5 生产者-消费者之间的线程间通信177
2.9.6 需要在synchronized同步块的内部使用wait和notify180
第3章 CAS原理与JUC原子类182
3.1 什么是CAS182
3.1.1 Unsafe类中的CAS方法182
3.1.2 使用CAS进行无锁编程185
3.1.3 使用无锁编程实现轻量级安全自增186
3.1.4 字段偏移量的计算189
3.2 JUC原子类191
3.2.1 JUC中的Atomic原子操作包191
3.2.2 基础原子类AtomicInteger192
3.2.3 数组原子类AtomicIntegerArray194
3.2.4 AtomicInteger线程安全原理195
3.3 对象操作的原子性198
3.3.1 引用类型原子类198
3.3.2 属性更新原子类200
3.4 ABA问题201
3.4.1 了解ABA问题201
3.4.2 ABA问题解决方案203
3.4.3 使用AtomicStampedReference解决ABA问题203
3.4.4 使用AtomicMarkableReference解决ABA问题205
3.5 提升高并发场景下CAS操作的性能207
3.5.1 以空间换时间:LongAdder208
3.5.2 LongAdder的原理211
3.6 CAS在JDK中的广泛应用218
3.6.1 CAS操作的弊端和规避措施218
3.6.2 CAS操作在JDK中的应用219
第4章 可见性与有序性的原理220
4.1 CPU物理缓存结构220
4.2 并发编程的三大问题222
4.2.1 原子性问题222
4.2.2 可见性问题223
4.2.3 有序性问题224
4.3 硬件层的MESI协议原理227
4.3.1 总线锁和缓存锁228
4.3.2 MSI协议230
4.3.3 MESI协议及RFO请求230
4.3.4 volatile的原理234
4.4 有序性与内存屏障237
4.4.1 重排序237
4.4.2 As-if-Serial规则238
4.4.3 硬件层面的内存屏障240
4.5 JMM详解242
4.5.1 什么是Java内存模型243
4.5.2 JMM与JVM物理内存的区别244
4.5.3 JMM的8个操作246
4.5.4 JMM如何解决有序性问题248
4.5.5 volatile语义中的内存屏障250
4.6 Happens-Before规则251
4.6.1 Happens-Before规则介绍252
4.6.2 规则1:顺序性规则252
4.6.3 规则2:volatile规则252
4.6.4 规则3:传递性规则255
4.6.5 规则4:监视锁规则255
4.6.6 规则5:start()规则256
4.6.7 规则6:join()规则257
4.7 volatile不具备原子性258
4.7.1 volatile变量的自增实例258
4.7.2 volatile变量的复合操作不具备原子性的原理260
第5章 JUC显式锁的原理与实战262
5.1 显式锁262
5.1.1 显式锁Lock接口263
5.1.2 可重入锁ReentrantLock264
5.1.3 使用显式锁的模板代码267
5.1.4 基于显式锁进行“等待-通知”方式的线程间通信269
5.1.5 LockSupport273
5.1.6 显式锁的分类276
5.2 悲观锁和乐观锁279
5.2.1 悲观锁存在的问题279
5.2.2 通过CAS实现乐观锁279
5.2.3 不可重入的自旋锁280
5.2.4 可重入的自旋锁281
5.2.5 CAS可能导致“总线风暴”283
5.2.6 CLH自旋锁285
5.3 公平锁与非公平锁293
5.3.1 非公平锁实战293
5.3.2 公平锁实战295
5.4 可中断锁与不可中断锁296
5.4.1 锁的可中断抢占296
5.4.2 死锁的监测与...
 编辑推荐
涵盖高并发开发、
大厂面试的核心难题
从设计模式和基础知识入手,抽丝剥茧,
将高深莫测的Java高并发知识讲解得浅显易懂