Java多线程编程核心技术(第3版)
上QQ阅读APP看书,第一时间看更新

前言

为什么写作本书

不管是学习JavaSE、JavaEE、JavaWeb,还是学习Java大数据、Java移动开发、Java分布式、Java微服务,“多线程编程”都是必不可少的核心技术点。本书是首本多线程技术书,自第1版和第2版出版以来,获得了广大Java程序员与学习者的关注,在技术论坛、博客、公众号等平台涌现了大量针对Java多线程技术的讨论与分享。有些读者在第一时间根据书中的知识总结了学习笔记,并在博客上进行分享,这种传播知识的精神令人赞赏和尊重,知识就要分享与传播。我也很高兴能为国内IT知识的体系建设尽微薄之力。

然而本书第1版和第2版出版时,基于Java的分布式/微服务技术还没有强调性能的想法,只是单纯地实现RPC远程调用即可,但随着分布式/微服务技术的稳定与推广,我们发现,单机的性能其实仍是分布式/微服务需要关注的基本点,因为只有单机运行环境的性能上去了,分布式/微服务的整体性能才能得到大幅度的提高,而在这中间一定会涉及两个技术点:数据的组织和线程的管理。掌握了这两个技术点,读者就可以自己实现消息队列,实现对数据的入队和出队的管理,这完全可以由现成的Java并发包中的并发集合工具类实现,不需要自己编写代码,从而大大提升了程序员的开发效率,避免了程序员自己重复造轮子的现象。

与此同时,我也收到了很多读者希望扩展或者深入讲解某些知识点的反馈建议,所以决定升级本书。

第3版与第2版的区别

第3版注重实战知识点的更新,主要是增加了针对“数据的组织”的第8章(并发集合工具类),以及针对“线程的管理”的第9章(Java线程池)。

第8章介绍了并发集合框架,这是在多线程环境下使用较多的集合工具类,它一方面可以大大提升开发者开发多线程应用程序的效率,另一方面对数据的组织也更具有规划性,能够满足高并发环境下的使用需求。

第9章增加了线程池的使用,让线程管理更规范、高效。线程池也是Java程序员面试必问的技术点。该章深入方法参数与源代码层面,讲解了有界池和无界池应用,可大大提升读者开发高性能服务器的能力。

第3版还增加了若干实用的技术点。

第1章中丰富了最新版JDK中的Thread类的API。

第2章中强化了多线程中最重要的理论基石“栅栏”的解释与代码实现。

第3章中增加了以下内容:① volatile关键字在同步与可视性方面的案例,并着重讲解了该关键字在使用方面的注意事项及技巧;② 使用并发包实现线程间通信的解决方案,以及并发包中同步锁的实现原理;③ 线程异步通信机制的解释与最新版JDK实现代码。

第5章中优化了定时器相关的案例,代码更加简洁、明晰。

第7章中细化了Java线程状态的切换。

本书写作秉承“大道至简”思想,只介绍Java多线程开发中最值得关注的内容,希望能抛砖引玉,以个人的一些想法和见解,为读者拓展出更深入、更全面的思路。

本书特色

在本书写作的过程中,我尽量减少“啰唆”的语言,全部以Demo式案例来讲解技术点的实现,使读者看到代码及运行结果后就可以知道该项目要解决的是什么问题,类似于网络中博客的风格,让读者用最短的时间学习知识点,明白知识点如何应用,以及在使用时要避免什么,从而快速学习并解决问题。

读者对象

□Java程序员

□系统架构师

□Java多线程开发者

□Java并发开发者

□大数据开发者

□其他对多线程技术感兴趣的人员

如何阅读本书

本书本着实用、易懂的原则,用9章来介绍Java多线程相关的技术。

第1章讲解了Java多线程的基础,包括Thread类的核心API的使用。

第2章讲解了在多线程中对并发访问的控制,主要是synchronized关键字的使用。因为此关键字在使用上非常灵活,所以该章给出很多案例来说明此关键字的用法,为读者学习同步知识点打好坚实的基础。

第3章讲解了线程之间的通信与交互细节。该章主要介绍wait()、notifyAll()和notify()方法的使用,使线程间能互相通信,合作完成任务,还介绍了ThreadLocal类的使用,学习完该章,读者就能在Thread多线程中进行数据的传递了。

第4章讲解了锁的使用。因为synchronized关键字使用起来比较麻烦,所以Java 5及以上版本中提供了锁(Lock对象),更好地实现了并发访问时的同步处理,包括读写锁等。

第5章讲解了Timer定时器类,其内部原理就是使用多线程技术。定时器是执行计划任务时很重要的技术点,在进行Android开发时也会有深入的使用。

第6章讲解的单例模式虽然很简单,但如果遇到多线程将会变得非常麻烦。如何在多线程中解决这么棘手的问题呢?该章会全面给出解决方案。

第7章对前面章节遗漏的技术空白点进行补充,使多线程的知识体系更加完整。

第8章讲解了并发集合框架的使用,几乎涵盖所有主流的并发集合工具类,并细化到API级,包含阻塞和非阻塞的使用等。

第9章讲解了线程池的使用,包括读者应该着重掌握的ThreadPool线程池构造方法参数的特性以及其他常用API的使用,并详细讲解了线程池内部源代码的实现。

交流和支持

由于笔者水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正,期待能够得到你们的真挚反馈,在技术之路上互勉共进。笔者的邮箱是279377921@qq.com。

致谢

在本书的出版过程中,感谢公司领导和同事的大力支持,感谢家人给予我充足的时间来撰写稿件。感谢我的儿子高晟京,看到他,我有了更多动力。最后感谢为此稿件耗费大量精力的高婧雅编辑,她仔细谨慎的工作态度是我学习的榜样,是她的鼓励和帮助引导我顺利完成本书。

高洪岩