Java高并发核心编程 卷2:多线程、锁、JMM、JUC、高并发设计模式
- ISBN:9787111679882
- 装帧:一般胶版纸
- 册数:暂无
- 重量:暂无
- 开本:16开
- 页数:484
- 出版时间:2021-06-01
- 条形码:9787111679882 ; 978-7-111-67988-2
本书特色
适读人群 :Java工程师、架构师,参加互联网大厂面试、笔试的人员涵盖高并发开发、 大厂面试的核心难题 从设计模式和基础知识入手,抽丝剥茧, 将高深莫测的Java高并发知识讲解得浅显易懂 主要内容 浅显易懂地剖析了多线程、线程池的底层原理 结合线上项目经验,总结了IO密集型、CPU密集型线程池的线程数预估算法 图文并茂地介绍了内置锁、JUC显式锁的核心原理和设计模式 细致深入地揭秘了JMM内存模型 全面介绍了JUC框架,并给出其核心组件的实战案例 详尽地介绍了高并发设计模式的使用
内容简介
本书聚焦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和notify 180
第3章 CAS原理与JUC原子类 182
......
作者简介
作者简介 尼恩,中南大学硕士,架构师,先后在华为、神州数码从事技术研发工作,专注于高性能Web平台、高性能通信、高性能搜索、数据挖掘等领域的架构设计和分析工作。
-
乡村振兴新技术:新时代农村短视频编辑技术基础入门
¥12.8¥32.0 -
AI绘画+AI摄影+AI短视频从入门到精通
¥45.5¥79.8 -
企业AI之旅
¥43.5¥79.0 -
机器学习
¥59.4¥108.0 -
基于知识蒸馏的图像去雾技术
¥61.6¥88.0 -
软件设计的哲学(第2版)
¥51.0¥69.8 -
智能算法优化及其应用
¥52.4¥68.0 -
Photoshop图像处理
¥25.5¥49.0 -
R语言医学数据分析实践
¥72.3¥99.0 -
大模型推荐系统:算法原理、代码实战与案例分析
¥62.3¥89.0 -
剪映 从入门到精通
¥25.7¥59.8 -
游戏造梦师----游戏场景开发与设计
¥67.6¥98.0 -
SAR图像处理与检测
¥35.4¥49.8 -
人工智能
¥29.4¥42.0 -
中文版PHOTOSHOP 2024+AI修图入门教程
¥59.3¥79.0 -
WPS办公软件应用
¥25.2¥36.0 -
格拉斯曼流行学习及其在图像集分类中的应用
¥13.7¥28.0 -
轻松上手AIGC:如何更好地向CHATGPT提问
¥40.3¥62.0 -
元宇宙的理想与现实:数字科技大成的赋能与治理逻辑
¥61.6¥88.0 -
云原生安全:攻防与运营实战
¥66.8¥89.0