一本书讲透Java线程 原理与实践
新华书店全新正版,极速发货,假一罚十,可开电子发票,请放心购买。
¥
63.3
5.8折
¥
109
全新
库存7件
作者储诚益
出版社机械工业出版社
ISBN9787111737261
出版时间2023-11
装帧平装
开本16开
定价109元
货号1203138434
上书时间2024-10-23
商品详情
- 品相描述:全新
- 商品描述
-
目录
前言
基础篇
第1章 Linux线程基础2
1.1 Linux进程2
1.1.1 深入理解进程2
1.1.2 进程描述符3
1.1.3 进程创建6
1.1.4 上下文切换7
1.2 Linux进程间通信7
1.2.1 信号 8
1.2.2 管道9
1.2.3 共享内存 9
1.2.4 FIFO队列 9
1.2.5 消息队列 10
1.2.6 Socket10
1.3 CPU任务调度10
1.3.1 实时进程与普通进程11
1.3.2 实时调度策略11
1.3.3 普通调度策略11
1.3.4 CFS调度算法11
1.3.5 整体任务调度12
1.4 Linux线程13
1.4.1 Pthread简介14
1.4.2 线程创建16
1.4.3 线程终止18
1.5 线程同步:互斥量20
1.5.1 创建互斥量21
1.5.2 互斥量解锁22
1.5.3 mutex示例22
1.6 线程同步:条件变量23
1.6.1 创建条件变量23
1.6.2 条件变量等待24
1.6.3 条件变量通知24
1.6.4 条件变量使用示例24
1.7 线程同步:信号量25
1.7.1 初始化未命名信号量26
1.7.2 等待一个信号量26
1.7.3 发布一个信号量26
1.8 小结27
第2章 JVM基础知识28
2.1 Java、JDK、JRE与JVM28
2.2 Java跨平台原理29
2.3 JVM系统架构30
2.3.1 类加载子系统30
2.3.2 运行时数据区33
2.3.3 执行引擎35
2.4 JVM与操作系统的线程模型36
2.4.1 操作系统的线程模型36
2.4.2 JVM的线程模型38
2.5 JNI机制39
2.5.1 JNI开发流程40
2.5.2 JNI数据类型转换41
2.5.3 实现案例43
2.6 小结43
第3章 JVM线程44
3.1 为什么需要多线程44
3.1.1 CPU访问各组件周期45
3.1.2 多线程的出现45
3.2 多线程带来的问题46
3.2.1 CPU缓存导致的可见性问题46
3.2.2 线程上下文切换带来的原子性问题47
3.2.3 优化带来的乱序问题48
3.3 Java内存模型与线程规范50
3.3.1 变量共享51
3.3.2 变量共享的内存可见性51
3.3.3 Happens-Before规则52
3.4 内存一致性协议56
3.4.1 CPU缓存读取策略57
3.4.2 CPU缓存写入策略58
3.4.3 MESI协议59
3.5 内存屏障61
3.5.1 内存读写屏障64
3.5.2 内存屏障的实现64
3.5.3 JVM内存屏障指令实现65
3.6 JVM的线程66
3.7 Java线程创建过程68
3.7.1 线程创建69
3.7.2 线程执行73
3.8 Java线程生命周期75
3.8.1 Java线程生命周期模型75
3.8.2 查看线程的状态78
3.9 小结79
第4章 JVM线程通信原理80
4.1 ParkEvent原理80
4.1.1 Allocate方法81
4.1.2 Rlease方法81
4.1.3 park方法82
4.1.4 unpark方法83
4.2 Parker实现原理84
4.2.1 park方法84
4.2.2 unpark方法86
4.3 sleep方法实现原理86
4.3.1 JVM_Sleep函数86
4.3.2 sleep函数87
4.4 ObjectMonitor实现原理88
4.4.1 数据结构89
4.4.2 ObjectMonitor的构造函数89
4.4.3 ObjectWaiter源代码90
4.4.4 TryLock方法91
4.4.5 EnterI方法91
4.4.6 ReenterI方法93
4.4.7 enter方法94
4.4.8 exit方法?95
4.4.9 ExitEpilog方法97
4.5 wait与notify方法实现原理97
4.5.1 设计原理98
4.5.2 wait方法实现原理100
4.5.3 notify方法实现原理102
4.5.4 notifyAll方法实现原理103
4.6 yield方法实现原理103
4.7 join方法实现原理104
4.7.1 JVM_IsThreadAlive105
4.7.2 ensure_join106
4.8 stop方法实现原理107
4.8.1 JVM_StopThread107
4.8.2 HAS_PENDING_EXCEPTION108
4.9 interrupt方法实现原理109
4.10 小结110
第5章 JVM线程同步机制111
5.1 Mark Word 111
5.1.1 Mark Word详解 112
5.1.2 hashCode验证113
5.1.3 轻量级锁的状态信息114
5.1.4 重量级锁的状态信息114
5.2 synchronized设计原理115
5.2.1 synchronized的使用116
5.2.2 synchronized的具体设计118
5.3 synchronized源码分析120
5.3.1 ACC_SYNCHRONIZED解析过程120
5.3.2 monitorenter指令解析过程122
5.3.3 monitorexit指令解析过程123
5.3.4 锁获取实现过程124
5.3.5 锁释放实现过程126
5.4 volatile实现原理128
5.4.1 实现原理概述129
5.4.2 getfield指令实现过程130
5.4.3 putfield指令实现过程131
5.5 volatile伪共享132
5.6 CAS硬件同步原语134
5.6.1 CAS硬件原语134
5.6.2 JVM CAS实现135
5.6.3 ABA问题135
5.7 Unsafe功能介绍136
5.7.1 操作内存136
5.7.2 获取字段内存偏移量137
5.7.3 普通字段的读取与赋值138
5.7.4 volatile字段的读取与赋值138
5.7.5 CAS操作能力139
5.7.6 线程阻塞与唤醒139
5.7.7 内存屏障139
5.8 Unsafe实现原理140
5.8.1 volatile字段读取140
5.8.2 volatile字段写入141
5.8.3 CAS操作能力141
5.8.4 线程阻塞与唤醒142
5.9 LockSupport实现原理143
5.9.1 Unsafe初始化143
5.9.2 无阻塞对象方法144
5.9.3 有阻塞对象方法144
5.9.4 线程唤醒146
5.10 小结146
进阶篇
第6章 Java锁实现原理148
6.1 CPU架构148
6.1.1 SMP148
6.1.2 NUMA149
6.1.3 SMP与NUMA比较150
6.2 自旋锁的诞生150
6.2.1 SPIN ON TEST-AND-SET150
6.2.2 TEST-AND-TEST-AND-SET151
6.2.3 DELAY BETWEEN EACH REFERENCE151
6.2.4 READ-AND-INCREMENT151
6.3 MCS锁的实现152
6.3.1 获取锁的过程153
6.3.2 释放锁的过程153
6.3.3 MCS锁的特征154
6.3.4 锁的实现案例154
6.3.5 MCS锁的不足155
6.4 CLH锁的实现156
6.4.1 获取锁的过程157
6.4.2 释放锁的过程157
6.4.3 CLH锁与MCS锁的对比158
6.4.4 锁的实现案例158
6.5 AQS设计原理159
6.5.1 功能与特征159
6.5.2 设计原理160
6.5.3 设计模式161
6.6 AQS实现过程162
6.6.1 逻辑架构162
6.6.2 状态管理162
6.6.3 队列管理163
6.6.4 线程与队列管理层165
6.6.5 锁的逻辑实现168
6.6.6 扩展接口层170
6.6.7 API层170
6.7 ReentrantLock实现原理172
6.7.1 源码简介173
6.7.2 基础同步器174
6.7.3 非公平锁策略175
6.7.4 公平锁策略176
6.7.5 ReentrantLock实现176
6.8 ReentrantReadWriteLock实现原理176
6.8.1 设计模式177
6.8.2 锁状态设计178
6.8.3 共享锁重入次数设计179
6.8.4 获取写锁状态180
6.8.5 释放写锁状态181
6.8.6 获取读锁状态181
6.8.7 释放读锁状态182
6.8.8 获取写锁183
6.8.9 获取读锁184
6.8.10 ReentrantReadWriteLock实现184
6.9 CountDownLatch实现原理185
6.9.1 设计原理186
6.9.2 Sync源码分析187
6.9.3 CountDownLatch源码分析187
6.10 小结188
第7章 Java原子操作类实现原理189
7.1 AtomicInteger实现原理189
7.1.1 设计原理189
7.1.2 源码分析190
7.2 AtomicBoolean实现原理191
7.2.1 设计原理191
7.2.2 源码分析192
7.3 AtomicIntegerArray实现原理192
7.3.1 设计原理193
7.3.2 源码分析195
7.4 AtomicIntegerFieldUpdater实现原理196
7.4.1 设计原理198
7.4.2 AtomicIntegerFieldUpdater源码分析198
7.4.3 AtomicIntegerFieldUpdaterImpl源码分析199
7.5 long的原子性修改实现原理200
7.5.1 AtomicLong201
7.5.2 AtomicLongArray201
7.5.3 AtomicLongFieldUpdater202
7.6 LongAdder实现原理203
7.6.1 设计原理203
7.6.2 源码分析204
7.7 小结207
第8章 Java并发容器实现原理208
8.1 CopyOnWriteArrayList实现原理208
8.1.1 设计原理209
8.1.2 源码分析210
8.2 ConcurrentHashMap实现原理212
8.2.1 HashTable设计原理212
8.2.2 ConcurrentHashMap 1.7设计原理213
8.2.3 ConcurrentHashMap 1.8设计原理214
8.2.4 源码分析217
8.3 ConcurrentSkipListMap实现原理229
8.3.1 设计原理229
8.3.2 源码分析232
8.4 LinkedBlockingQueue实现原理239
8.4.1 设计原理240
8.4.2 源码分析241
8.5 ArrayBlockingQueue实现原理245
8.5.1 设计原理246
8.5.2 源码分析248
8.6 SynchronousQueue实现原理250
8.6.1 设计原理250
8.6.2 源码分析254
8.7 LinkedBlockingDeque实现原理259
8.7.1 设计原理260
8.7.2 源码分析261
8.8 小结266
第9章 Java线程池实现原理267
9.1 对象池设计模式267
9.2 生产者-消费者模式269
9.2.1 设计原理269
9.2.2 实现案例272
9.3 普通线程池的实现原理274
9.3.1 设计原理274
9.3.2 源码分析279
9.4 FutureTask实现原理289
9.4.1 设计原理289
9.4.2 源码分析291
9.5 ScheduledThreadPoolExecutor实现原理297
9.5.1 设计原理298
9.5.2 源码分析302
9.6 Executors实现原理309
9.7 小结310
应用篇
第10章 Java线程池使用312
10.1 线程池的使用模型312
10.1.1 单线程提交-多线程处理312
10.1.2 单线程提交-单线程处理315
10.1.3 多线程提交-单线程处理315
10.1.4 多线程提交-多线程处理316
10.2 本地缓存实现316
10.2.1 设计原理317
10.2.2 实现方案318
10.3 多线程异步执行321
10.3.1 设计原理321
10.3.2 实现方案322
10.3.3 改进方案326
10.4 批量处理任务的执行329
10.4.1 设计原理329
10.4.2 实现方案330
10.5 并发排队队列334
10.5.1 设计原理335
10.5.2 实现方案336
10.6 小结338
第11章 Java多线程编程技巧339
11.1 线程异常处理339
11.2 线程正确关闭341
11.2.1 使用退出标志终止线程341
11.2.2 使用interrupt方法中断线程342
11.2.3 使用stop方法终止线程 342
11.3 线程死锁343
11.3.1 锁顺序性死锁343
11.3.2 动态执行死锁344
11.3.3 死锁检测345
11.3.4 死锁规避346
11.4 并发容器的使用346
11.4.1 List的使用346
11.4.2 Map的使用347
11.4.3 Set的使用347
11.4.4 Queue的使用348
11.5 小结348
内容摘要
本书由科大讯飞高级系统架构师撰写,结合大量源码与图示,通俗易懂;自顶向下解析JDK、JVM、Linux中的Java线程通信机制、同步机制、锁机制、原子计数器、线程安全容器、线程池的实现原理与应用技巧。全书共12章,分为三篇。 基础篇(第1~5章),从Linux的线程基础讲起,重点从JDK、JVM、Linux多个维度讲解Java线程的设计、通信与同步机制,如内存一致性、内存屏障、多线程间数据通信、并发控制等核心知识,从而在实际开发中提高程序的性能和稳定性。 进阶篇(第6~9章),从CPU的架构讲起,重点讲解锁算法(MCS、CLH、AQS)、Java锁机制、原子计数器、线程并发容器、线程池的设计原理与实现,以期让读者掌握Java线程的进阶知识,不仅能开发出高性能的程序,而且遇到问题可以举一反三,找到很好方案。 应用篇(第10~11章),详细讲解Java线程的常见模型与使用技巧。以电商真实场景为例,从面临的挑战、基于Java多线程的实现方案与优化等角度层层递进,让读者感受真实的Java线程“威力”。 最后,总结多线程编程的常见问题与使用技巧。
主编推荐
本书由科大讯飞高级系统架构师撰写,结合大量源码与图示,通俗易懂;自顶向下解析JDK、JVM、Linux中的Java线程通信机制、同步机制、锁机制、原子计数器、线程安全容器、线程池的实现原理与应用技巧。
— 没有更多了 —
以下为对购买帮助不大的评价