Java并发编程的艺术封面

Java并发编程的艺术

书号:9787111508243 页数:240 出版日期: 分类: 编程开发书籍
购买/下载 赞 (3138)

第1章介绍Java并发编程的挑战,会向读者说明可能会遇到哪些问题,以及如何解决。第2章Java并发编程的底层实现原理,从CPU和JVM2个层面剖析。第3章详细深入介绍了Java的内存模型。第4章从介绍多线程技术带来的好处开始,讲述了如何启动和终止线程以及线程的状态,详细阐述了多线程之间进行通信的基本方式和等待/通知经典范式。第5章介绍Java并发包中与锁相关的API和组件,以及这些API和组件的使用方式和实现细节。第6章介绍了Java中的大部分并发容器及其实现原理。第7章介绍了Java中的原子操作类,并给出一些实例。第8章介绍了Java中提供的很多并发工具类。第9章介绍了Java中的线程池实现原理和使用建议。第10章介绍了Executor框架的整体结构和成员组件。第11章介绍几个并发编程的实战与并发编程问题排查。

  • 第1章介绍Java并发编程的挑战,会向读者说明可能会遇到哪些问题,以及如何解决。
  • 第2章Java并发编程的底层实现原理,从CPU和JVM2个层面剖析。
  • 第3章详细深入介绍了Java的内存模型。
  • 第4章从介绍多线程技术带来的好处开始,讲述了如何启动和终止线程以及线程的状态,详细阐述了多线程之间进行通信的基本方式和等待/通知经典范式。
  • 第5章介绍Java并发包中与锁相关的API和组件,以及这些API和组件的使用方式和实现细节。
  • 第6章介绍了Java中的大部分并发容器及其实现原理。
  • 第7章介绍了Java中的原子操作类,并给出一些实例。
  • 第8章介绍了Java中提供的很多并发工具类。
  • 第9章介绍了Java中的线程池实现原理和使用建议。
  • 第10章介绍了Executor框架的整体结构和成员组件。
  • 第11章介绍几个并发编程的实战与并发编程问题排查。

本书特色

《Java并发编程的艺术》正是为了解决这个问题而写的。书中采用循序渐进的讲解方式,从并发编程的底层实现机制入手,逐步介绍了在设计Java并发程序时各种重要的技术、设计模式与应用,同时辅以丰富的示例代码,使得开发人员能够更快地领悟Java并发编程的要领,围绕着Java平台的基础并发功能快速地构建大规模的并发应用程序。

作者介绍

购买链接

下载电子书

微信扫码关注 Linux265 公众号获取电子书

微信扫码关注公众号 「Linux265」 后,回复 34jg 获取电子书!

  • 前言
  • 第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.1volatile的应用8
  • 2.2synchronized的实现原理与应用11
  • 2.2.1Java对象头12
  • 2.2.2锁的升级与对比13
  • 2.3原子操作的实现原理16
  • 2.4本章小结20
  • 第3章Java内存模型21
  • 3.1Java内存模型的基础21
  • 3.1.1并发编程模型的两个关键问题21
  • 3.1.2Java内存模型的抽象结构22
  • 3.1.3从源代码到指令序列的重排序23
  • 3.1.4并发编程模型的分类24
  • 3.1.5happens—before简介26
  • 3.2重排序27
  • 3.2.1数据依赖性28
  • 3.2.2as—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.4volatile的内存语义38
  • 3.4.1volatile的特性38
  • 3.4.2volatile写—读建立的happens—before关系39
  • 3.4.3volatile写—读的内存语义40
  • 3.4.4volatile内存语义的实现42
  • 3.4.5JSR—133为什么要增强volatile的内存语义46
  • 3.5锁的内存语义47
  • 3.5.1锁的释放—获取建立的
  • happens—before关系47
  • 3.5.2锁的释放和获取的内存语义48
  • 3.5.3锁内存语义的实现50
  • 3.5.4concurrent包的实现54
  • 3.6final域的内存语义55
  • 3.6.1final域的重排序规则55
  • 3.6.2写final域的重排序规则56
  • 3.6.3读final域的重排序规则57
  • 3.6.4final域为引用类型58
  • 3.6.5为什么final引用不能从构造函数内“溢出”59
  • 3.6.6final语义在处理器中的实现61
  • 3.6.7JSR—133为什么要增强f?inal的语义62
  • 3.7happens—before62
  • 3.7.1JMM的设计62
  • 3.7.2happens—before的定义64
  • 3.7.3happens—before规则65
  • 3.8双重检查锁定与延迟初始化67
  • 3.8.1双重检查锁定的由来67
  • 3.8.2问题的根源69
  • 3.8.3基于volatile的解决方案71
  • 3.8.4基于类初始化的解决方案72
  • 3.9Java内存模型综述78
  • 3.9.1处理器的内存模型78
  • 3.9.2各种内存模型之间的关系80
  • 3.9.3JMM的内存可见性保证80
  • 3.9.4JSR—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.5Daemon线程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.1volatile和synchronized关键字96
  • 4.3.2等待/通知机制98
  • 4.3.3等待/通知的经典范式101
  • 4.3.4管道输入/输出流102
  • 4.3.5Thread.join()的使用103
  • 4.3.6ThreadLocal的使用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.1Lock接口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.5LockSupport工具146
  • 5.6Condition接口147
  • 5.6.1Condition接口与示例148
  • 5.6.2Condition的实现分析150
  • 5.7本章小结154
  • 第6章Java并发容器和框架155
  • 6.1ConcurrentHashMap的实现原理与使用155
  • 6.1.1为什么要使用ConcurrentHashMap155
  • 6.1.2ConcurrentHashMap的结构156
  • 6.1.3ConcurrentHashMap的初始化157
  • 6.1.4定位Segment159
  • 6.1.5ConcurrentHashMap的操作160
  • 6.2ConcurrentLinkedQueue161
  • 6.2.1ConcurrentLinkedQueue的结构162
  • 6.2.2入队列162
  • 6.2.3出队列165
  • 6.3Java中的阻塞队列167
  • 6.3.1什么是阻塞队列167
  • 6.3.2Java里的阻塞队列168
  • 6.3.3阻塞队列的实现原理172
  • 6.4Fork/Join框架175
  • 6.4.1什么是Fork/Join框架175
  • 6.4.2工作窃取算法176
  • 6.4.3Fork/Join框架的设计177
  • 6.4.4使用Fork/Join框架177
  • 6.4.5Fork/Join框架的异常处理179
  • 6.4.6Fork/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等待多线程完成的CountDownLatch189
  • 8.2同步屏障CyclicBarrier191
  • 8.2.1CyclicBarrier简介191
  • 8.2.2CyclicBarrier的应用场景193
  • 8.2.3CyclicBarrier和CountDownLatch的区别195
  • 8.3控制并发线程数的Semaphore196
  • 8.4线程间交换数据的Exchanger198
  • 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.1Executor框架简介208
  • 10.1.1Executor框架的两级调度模型208
  • 10.1.2Executor框架的结构与成员208
  • 10.2ThreadPoolExecutor详解213
  • 10.2.1FixedThreadPool详解213
  • 10.2.2SingleThreadExecutor详解214
  • 10.2.3CachedThreadPool详解215
  • 10.3ScheduledThreadPoolExecutor详解217
  • 10.3.1ScheduledThreadPoolExecutor的运行机制217
  • 10.3.2ScheduledThreadPoolExecutor的实现218
  • 10.4FutureTask详解221
  • 10.4.1FutureTask简介222
  • 10.4.2FutureTask的使用222
  • 10.4.3FutureTask的实现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
展开全部目录

评论(0

暂无评论,来说两句吧

发表评论

回复 取消