为什么要写这本书
早在几年前笔者就曾想过整理一份与Java并发包有关的稿件。因为市面上所有的Java书籍都是以1章或2章的篇幅介绍Java并发包技术,这就导致对Java并发包的讲解并不是非常详尽,包含的知识量远远不够,并没有完整覆盖Java并发包技术的知识点。但可惜,苦于当时的时间及精力有限,一直没有如愿。
也许是注定的安排,笔者现所在单位是集技术与教育为一体的软件类企业,学员在学习完JavaSE/JavaEE之后想探索更深入的技术,比如大数据、分布式、高并发类的专题,就会立即遇到与Java并发包中API相关的问题。为了带领学员在技术层面上有更高的追求,所以我将Java并发包的技术点以教案的方式进行整理,在课堂上与同学们一起进行学习、交流,同学们反响非常强烈。至此,若干年前的心愿终于了却,同学们也很期待这样一本书能出版发行,那样他们就有真正的纸质参考资料了。若这份资料也被其他爱好Java并发的朋友们看到,并通过它学到相关知识,那就是我最大的荣幸了。
本书将给读者一个完整的视角,秉承“大道至简”的主导思想,只介绍Java并发包开发中最值得关注的内容,希望能抛砖引玉,以个人的一些想法和见解,为读者拓展出更深入、全面的思路。
本书特色
本书尽量减少“啰嗦”式的文字语言,全部用Demo式案例来讲解技术点的实现,使读者看到代码及运行结果后就可以知道此项目要解决的是什么问题。类似于网络中Blog的风格,可让读者用最短的时间学会此知识点,明白此知识点如何应用,以及在使用时要避免什么。这就像“瑞士军刀”,虽短小,却锋利。本书的目的就是帮读者快速学习并解决问题。
读者对象
❑ Java初级、中级程序员
❑ Java多线程开发者
❑ Java并发开发者
❑ 系统架构师
❑ 大数据开发者
❑ 其他对多线程技术感兴趣的人员
如何阅读本书
在整理本书时,笔者本着实用、易懂的学习原则整理了10个章节来介绍Java并发包相关的技术。
第1章讲解了Semaphore和Exchanger类的使用,学完本章后,能更好地控制线程间的同步性,以及线程间如何更好、更方便地传输数据。
第2章是第1章的延伸,主要讲解了CountDownLatch、CyclicBarrier类的使用及在Java并发包中对并发访问的控制。本章主要包括Semaphore、CountDownLatch和CyclicBarrier的使用,它们在使用上非常灵活,所以对于API的介绍比较详细,为读者学习控制同步打好坚实的基础。
第3章是第2章的升级,由于CountDownLatch和CyclicBarrier类都有相应的弊端,所以在JDK1.7中新增加了Phaser类来解决这些缺点。
第4章中讲解了Executor接口与ThreadPoolExecutor线程池的使用,可以说本章中的知识也是Java并发包中主要的应用技术点,线程池技术也在众多的高并发业务环境中使用。掌握线程池能更有效地提高程序运行效率,更好地统筹线程执行的相关任务。
第5章中讲解Future和Callable的使用,接口Runnable并不支持返回值,但在有些情况下真的需要返回值,所以Future就是用来解决这样的问题的。
第6章介绍Java并发包中的CompletionService的使用,该接口可以增强程序运行效率,因为可以以异步的方式获得任务执行的结果。
第7章主要介绍的是ExecutorService接口,该接口提供了若干方法来方便地执行业务,是比较常见的工具接口对象。
第8章主要介绍计划任务ScheduledExecutorService的使用,学完本章可以掌握如何将计划任务与线程池结合使用。
第9章主要介绍Fork-Join分治编程。分治编程在多核计算机中应用很广,它可以将大的任务拆分成小的任务再执行,最后再把执行的结果聚合到一起,完全利用多核CPU的优势,加快程序运行效率。
第10章主要介绍并发集合框架。Java中的集合在开发项目时占有举足轻重的地位,在Java并发包中也提供了在高并发环境中使用的Java集合工具类,读者需要着重掌握Queue接口的使用。
勘误和支持
由于笔者的水平有限,加之编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。笔者邮箱是279377921@qq.com,期待能够得到你们的真挚反馈,在技术之路上互勉共进。
本书的源代码可以在华章网站(www.hzbook.com)下载。
致谢
感谢所在单位领导的支持与厚爱,使我在技术道路上更有信心。
感谢机械工业出版社华章公司的编辑们始终支持我的写作,是你们的鼓励和帮助引导我顺利完成全部书稿。
高洪岩