《Java高并发编程详解:多线程与架构设计》的姊妹篇!外企数据服务部技术专家撰写,分享多年Java服务器、大数据程序开发架构经验。
实战性强,从底层原理总结和归纳各个技术细节,结合真实的案例深入分析微基准测试、性能度量、Java高并发类库的原理及应用。
本书由浅入深、循序渐进地介绍Java高并发核心库的精髓,帮助读者掌握相关内容的技术细节。
内容讲解以真实问题为导向,层层递进,环环紧扣,详细阐述每一个解决方案的来龙去脉。
通过大量的实际案例,原理剖析和实战代码相结合,让读者能够更加清晰深入地理解每一个技术细节的用法和实用技巧。
详细介绍Java微基准测试工具集JMH与平台级性能指标数据度量工具Metrics的使用方法,帮助读者快速开发出高效、健壮的并发应用程序。
本书共包含四大部分。
第①部分(第1章)详细介绍了JMH微基准测试工具的使用细节。该工具是由Oracle JVM开发团队相关成员开发的,开发者借助它能够了解自己编写的程序代码以及程序在运行期的精确性能表现。在本书的其他章节对API之间的性能进行对比时,主要也是依赖该工具,因此在学习本书的其他章节时,最好能够掌握该部分内容。强烈推荐开发者将JMH纳入自己日常的“兵器库”中,以便能够随时随地使用。
第②部分(第2~5章)主要围绕Java并发包展开,内容包括:Java的原子类型及其底层原理(第2章);Java的并发工具集(第3章),其中还穿插了Google Guava的部分内容;Java的并发容器(第4章),包括阻塞队列BlockingQueue和并发容器等内容;Java的ExecutorService(第5章),以及Future家族成员的详解。
第③部分(第6章)主要介绍自Java 8 引入的Stream,并且重点解释了具备高并发能力的并行流原理,以及如何自定义并行流等相关内容。
第④部分(第7章)深入讲解了Metrics。作为一个比较小巧的度量工具集,Metrics目前已经成为事实上的度量标准,在很多开源软件、框架和平台中都能看到对它的使用,比如Apache的Kafka、Spark、Storm、Spring Cloud等都是使用Metrics作为系统运行性能指标收集的手段。
●第1章 JMH 1
1.1 JMH简介 1
1.2 JMH快速入门 1
1.3 JMH的基本用法 6
1.4 编写正确的微基准测试以及高级用法 27
1.5 JMH的Profiler 45
1.6 本章总结 56
●第2章 Java并发包之原子类型详解 57
2.1 AtomicInteger详解 58
2.2 AtomicBoolean详解 69
2.3 AtomicLong详解 74
2.4 AtomicReference详解 76
2.5 AtomicStampedReference详解 86
2.6 AtomicArray详解 89
2.7 AtomicFieldUpdater详解 90
2.8 sun.misc.Unsafe详解 93
2.9 本章总结 100
●第3章 Java并发包之工具类详解 102
3.1 CountDownLatch工具详解 102
3.2 CyclicBarrier工具详解 107
3.3 Exchanger工具详解 116
3.4 Semaphore工具详解 124
3.5 Phaser工具详解 138
3.6 Lock&ReentrantLock详解 150
3.7 ReadWriteLock&ReentrantRead-WriteLock详解 165
3.8 Condition详解 171
3.9 StampedLock详解 181
3.10 Guava之Monitor详解 192
3.11 Guava之RateLimiter详解 194
3.12 本章总结 204
●第4章 Java并发包之并发容器详解 205
4.1 链表 206
4.2 BlockingQueue(阻塞队列) 221
4.3 ConcurrentQueue(并发队列) 237
4.4 ConcurrentMap(并发映射) 245
4.5 写时拷贝算法(Copy On Write) 248
4.5.3 CopyOnWrite总结 250
4.6 高并发无锁(Lock Free)数据结构的实现 250
4.7 本章总结 255
●第5章 Java并发包之ExecutorService详解 256
5.1 Executor&ExecutorService详解 256
5.2 Future和Callback 277
5.3 ForkJoinPool 详解 284
5.4 CompletionService详解 289
5.5 CompletableFuture详解 294
5.6 本章总结 301
●第6章 Java Streams详解 302
6.1 Stream介绍及其基本操作 302
6.2 Collector在Stream中的使用 320
6.3 Parallel Stream详解 337
6.4 本章总结 344
●第7章 Metrics(Powerful Toolkit For Measure) 345
7.1 Metrics快速入门 345
7.2 五大Metric详解 346
7.3 Reporter详解 372
7.4 Metrics Plugins 380
7.5 深入Metrics源码 387
7.5.3 拾遗补漏 394
7.6 本章总结 396
温馨提示:请使用浙江图书馆的读者帐号和密码进行登录
【推荐序一】
恭喜汪文君老师又写新书了。
强烈推荐所有以成为Java高手、架构师为目标的读者阅读本书。本书深入讲述了Java高并发编程的相关内容,覆盖面广而全,可以将其看作Java高并发编程的一本百科全书。Java高并发编程是Java编程比较高阶的部分,讲述这部分内容的书不多,这本书的出版可以看作一个里程碑。
在知识体系方面,本书既有广度又有深度。在广度方面,本书覆盖了Java高并发编程的语法、高级用法与Profiler、类型详解、开发工具、高并发的数据机构及原理、实践编程的详细用法、框架的用法,以及典型场景下的应用案例。在深度方面,本书不仅对基于Java高并发编程的所有类的说明、用法与经典案例都进行了详尽的论述,而且对Java在这方面的发展与应用给出了深入浅出的解释。
随着近几年云原生、容器化、分布式计算的逐渐发展和普及,以及微服务架构的演进与兴起,Java高并发编程在设计与编程中的地位越来越重要。Java高并发编程已经成为架构师、资深编程人员进行分布式协作设计、服务设计、模块开发所必需的基本功,也是理解、使用、优化Web容器、JEE容器、云原生基础设施组件所不可或缺的基本技能。
在本书中,大家不仅能够学到深度、专业的编程知识,还能感受到汪文君老师专注地提高编程技能的态度,始终如一地贡献、分享Java专业知识与经验的精神,以及持续学习、持续成长的进取精神。在这些方面,他同样是我学习的楷模。
我们在学习书中的内容时,一定要动手编码,实践书中的知识。理论上,成为专业人员要经历四个阶段:无意识无能、有意识无能、有意识能力、无意识能力。通过不断学习、持续地实践和编程,最终将编程能力内化为个人的无意识能力。让我们的专业之路从这本书开始吧!
东软集团移动互联网事业部首席技术官 徐景辉
【推荐序二】
首先,我很荣幸可以再次受到邀请为Alex的新作写推荐序,Alex的第二本书《Java高并发编程详解:深入理解并发核心库》是一本内容非常全面的参考图书,该书可以帮助你充分了解和使用JVM生态圈中最重要的技术内容之一——Java并发核心库。
本书比较全面地探讨了并发核心库的各个方面,从基准测试JMH开始,到原子类型、并发工具、并发容器、ExecutorService、Java 8 Stream知识,以及最后的性能度量工具库Metrics,每一个细节的概念、使用方法、适合的应用场合、应避免使用的场合书中都进行了详细解释,并且都配备了非常详细的实例,可以帮助读者快速建立对其的理解和认识。
对于想学习Java并发编程的人或有一定经验的开发人员来说,如果他们希望有什么资料能在以后的工作中为自己提供专业的参考,那么我强烈推荐这本书。
OSL公司首席技术官 Andrew Davidson
【推荐序三】
以我从事云计算平台研发架构及咨询近10年的经验来看,弹性云,以及服务组件免费、资源付费的模式将是一个成熟的模式,而这就要求开发人员在节省资源的前提下能够开发出高性能的应用程序,合理充分地利用软硬件的资源,并且以廉价的成本为企业创造高性能的服务产品。这看起来似乎很难,没错!这确实不太容易。想象一下,我们基于AWS lambda架构设计开发的Serverless程序,在同等CPU、内存等其他服务调用的情况下,如果程序员能够开发并受理更多的业务量、提供更多的并发量,势必会更多地受到老板的喜爱和公司的重视。
这一观点同样也适用于现在越来越多的基于物联网的硬件设备。一般情况下,基于物联网的硬件终端,其软硬件配置短时间内很难达到普通PC甚至用于生产环境的服务器的水平,那么在有限的资源上开发出响应速度快、运算能力强的计算程序就显得尤为重要了。
本书中所讲述的内容给出了部分解决之道,Alex非常详细地介绍了Java并发包中的并发知识及技术细节,通过对它们的学习与应用,相信普通的开发者也可以开发出高性能、高吞吐量的应用程序。
Alex是一个非常有耐心的人,本书内容的系统化组织、知识点的细致讲述深深地吸引了我,本书的完成将是非常耗费时间的一次写作之旅,我很佩服他对基准测试的深刻认识以及对原子类型的完美解读。
作为一个Java程序员,哦不,作为一个基于JVM语言开发程序的工程师,我强烈推荐此书作为你的参考书籍。
EY安永金融服务咨询部云总监 Srimanth Rudraraju
【推荐序四】
“开发正确的程序是比较难的,开发正确的高并发多线程应用则更是难上加难。”我已经记不清这句话出自何处,但是我完全认同这句话所表达的观点。
我已经有20多年的软件开发经验,并且现在仍然乐于此道。正如Alex一样,我也喜欢琢磨和分析每一次软件开发过程中遇到的细节,这也是为什么我们彼此在仅有的几次社区探讨之后,就经常保持沟通与联络,我欣赏他愿意为了所从事的事业投入大量的热情和时间的精神。
让我们重新回到关于本书的话题中来。本书内容涵盖非常广泛,系统性地且有条理地讲述了Java并发包中的每一个常用工具及类。这些类与工具是全体Java从业人员多年的宝贵积累和产物,是通过无数次的探讨和实践总结归纳出的最佳实践。Alex将它们悉数详细解释给读者,这是一件非常了不起的事情,他一定也为此牺牲了很多陪伴家人的时间。
开发正确的高并发多线程程序是极为困难的,不过不用担心,学习并且使用优秀的并发库就可以帮我们屏蔽这些令人担忧的问题,这也是本书的价值所在。
希望该书的读者在阅读和学习之后能有一定的收获。
软件架构师、Apache软件基金会成员、开源软件Tomcat PMC成员 Igal