实战Java高并发程序设计(第3版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

前言

关于Java与并行

由于单核CPU的主频逐步逼近极限,多核CPU架构成了一种必然的技术趋势,因此多线程并行程序便显得越来越重要。并行计算的一个重要应用场景就是服务端编程。目前服务端CPU的核心数已经轻松超越10个,而Java显然是当下最流行的服务端编程语言,且已经更新到JDK 14,因此熟悉和了解基于Java的并行程序开发有着重要的实用价值。

本书的体系结构

本书立足于实际开发,但不缺乏理论介绍,力求通俗易懂、循序渐进。本书共分为9章。

第1章主要介绍并行计算中的一些基本概念,让读者对并行计算有一个基本认识,其中包括两个重要的并行性能评估定律,以及Java内存模型JMM。

第2章介绍Java并行程序开发的基础,包括Java中线程的基本使用方法等,也详细介绍了并行程序容易引发的一些错误,以及容易出现的误用。

第3章介绍JDK内部对并行程序开发的支持,主要介绍JUC(java.util.concurrent)中一些工具的使用方法、各自的特点及它们的内部实现原理。

第4章介绍在开发过程中可以进行的对锁的优化,也进一步简要描述了Java虚拟机层面对并行程序的优化和支持。此外,还花了一定的篇幅介绍无锁的计算。

第5章介绍并行程序设计中常见的一些设计模式,以及典型的并行算法和使用方法,其中包括重要的Java NIO和AIO的介绍。

第6章介绍Java 8/9/10为并行计算所做的改进,包括并行流、CompletableFuture、StampedLock、LongAdder,以及发布和订阅模式等。

第7章主要介绍高并发框架Akka的基本使用方法,并使用Akka框架实现了一个简单的粒子群算法,模拟超高并发的场景。

第8章介绍使用Eclipse进行多线程调试的方法,并演示了通过Eclipse进行多线程调试来重现ArrayList的线程不安全问题。

第9章介绍Jetty,并分析Jetty的关键代码,主要展示它在高并发优化中所做的一些努力,也为读者学会并深入理解高并发提供一些提示和思考。

本书特色

本书的主要特色如下。

1.结构清晰。本书一共9章,总体上循序渐进、逐步提升。每一章都有鲜明的侧重点,有利于读者快速抓住重点。

2.理论结合实战。本书注重实战,书中重要的知识点都安排了代码实例,从而利于读者理解,同时对系统的内部实现原理进行了深度剖析。

3.通俗易懂。本书尽量避免采用过于理论化的描述方式,简单的白话文风格贯穿全书,配图基本上为手工绘制示意图,降低了理解难度,并尽量做到让读者在阅读过程中少盲点、无盲点。

适合阅读人群

虽然本书力求通俗,但是要通读本书并取得良好的学习效果,仍要求读者具备基本的Java知识或者一定的编程经验。因此,本书适合以下读者。

· 拥有一定开发经验的Java平台开发人员(Java、Scala、JRuby等)。

· 软件设计师、架构师。

· 系统调优人员。

· 有一定的Java编程基础并希望进一步加深对并行程序的理解的研发人员。

本书的约定和更新

本书在叙述过程中,有如下约定。

· 本书所述的JDK 1.8、JDK 1.9、JDK 1.10分别等同于JDK 8、JDK 9、JDK 10。

· 如无特殊说明,本书的程序、示例均在JDK 1.8以上环境中运行。

相较前一版,本书的主要更新如下。

1.第3章更新的内容如下。

· 更新了“3.1.3 允许多个线程同时访问:信号量(Semaphore)”。

· 增加了对AbstractQueuedSynchronizer的介绍。

· 增加了对ConcurrentHashMap在JDK 8中实现的介绍。

2.第4章更新的内容如下。

· 更新了“4.1.2 减小锁粒度”。

· 增加了对ThreadLocalRandmon实现的介绍。

· 更新了“4.4.2 无锁的线程安全整数:AtomicInteger”中有关原子类实现的介绍。

· 更新了“4.4.3 Java中的指针:Unsafe类”中有关Unsafe类的说明。

3.第5章更新的内容如下。

· 更新了“5.4.4 CPU Cache的优化:解决伪共享问题”中的示例。

4.第6章更新内容如下。

· 更新了“6.7.1 更快的原子类:LongAdder”中有关LongAdder的实现。

感谢

本书能够面世,是因为得到了众人的支持。首先,感谢我的妻子,她始终不辞辛劳、毫无怨言地对我照顾有加,这才让我得以腾出大量时间安心工作。其次,感谢所有编辑为我一次又一次地审稿改错,批评指正,帮助本书逐步完善。最后,感谢我的母亲三十年如一日对我的体贴和关心。

参与本书写作的还有薛淑英,特此感谢!

葛一鸣