级别: 初级 Sing Li (westmakaha@yahoo.com), 作者, Wrox Press
2006 年 8 月 14 日 如果以前没有购买 Java Concurrency in Practice(Goetz 等,Addison-Wesley,2006 年),那么现在该购买了。经验丰富的 Java™ 开发人员(和流行书作者)Sing Li 介绍了为什么即使并发性还没进入您的日常开发,也应当阅读这本重要的图书。该书由 developerWorks 的长期作者和并发性专家 Goetz 执笔。
线程透明世界中的并发性问题
随着诸如 Java EE 5 之类现代组件化服务器端开发框架的到来,似乎不再需要花费数天来处理并发性问题。这些成熟复杂的软件栈接手了危险的线程管理和并发性控制任务,让人们可以只专注于应用程序的业务逻辑。但是,在并发性问题发生时,问题通常是如此紧迫,甚至能击倒项目团队,而且,在一些意外情况下,会毁掉整个项目。更糟的是,因为现在许多人在整个开发人员生命期内都无需担心并发性、饥饿和死锁之类的问题,所以我们通常缺少处理这类问题的能力。
并发性历史
公平地说,对并发性的流行看法,随着时代而变化。最明显的变化是并发性的环境和开发人员对并发性元素拥有的控制程度。
在微处理器革命的早期,重点是使用汇编或编译语言的处理器中断处理和抢占式多任务。随着多任务操作系统(OS)的成熟,以及世界向以 OS API 为核心的环境的转变,OS 管理的同步和进程间通信(IPC)机制成为了主流。随着开发世界转向基于虚拟机的平台(即 Java 和 .Net 平台),更高的应用程序级的并发性控制也成为了必要。这些并发性机制幕后实际实现的低层细节,不论是使用底层的 OS API 还是直接使用硬件中断机制,都变得不太重要了。并发性协约和保证,现在要么来自开发框架(例如 Java EE 5),要么来自平台的 API(例如 java.util.concurrent)。
独特的挑战
在并发性环境发展的每个新阶段,可以从中寻找有效处理问题的智慧的知识池,都有很大的不同。虽然都是在一套相同的熟悉的基本概念元素基础上形成的,但每个阶段都有自己一套独特的挑战。
迎接挑战
所以,一本关于并发性的图书,必须勇敢地面对当前遇到的挑战。它必须捕捉相关的问题模式,并提出可行的解决方案 —— 或者基于当代最佳实践,或者基于过去使用的技术形成基本问题的解决方案。
同样,您会发现关于并发性的书籍非常稀少。它们不仅不是出版商愿意寻找的热门分类,而且适合的读者和愿意花时间研究和编写这类图书的人也极为稀少。
热情的工作
Java Concurrency in Practice 这本书诞生自 Brian Goetz 迎接 Java 开发平台上当前并发性挑战的个人热情。Brian 对这一领域的兴趣和贡献众所周知,而且有很好的记录(请参见 参考资料,阅读他在 developerWorks 上发表的 20 多篇关于并发性的文章),这让他在 Java 并发性社区成为受到高度尊重的人物。
 | 示例章节
Java Concurrency in Practice 的内容涉及多个层次上的并发性,包括出现的低级问题和如何有效地处理它们,还有 Java 5 中的库增强如何减轻了这些问题。
在 Chapter 2: Thread Safety 中,Brian 研究了线程安全性的意义,并提供了可以保证类和应用程序免遭并发性问题的具体建议。Brian 先从对易变状态不受保证的共享存取缺陷开始研究,演示了像封装、不变性、强制不变以及强规范这类最佳实践如何能够减轻这种风险。
然后他转换到研究一些现代的应用程序代码。通过一组代码示例,通过内存计数器的实现(并发修改-写入模式),他揭示了在跨请求的共享状态中线程安全性问题的出现方式。但是不必失望,他还介绍了内在锁(同步块)的使用如何能够在这些场景中确保线程安全性。Brian 总结这章时,提供了一些对当前最佳实践的深入思考,在锁定粒度方面以及代码/应用程序简单性相比性能之间的微妙平衡,也提供了建议。
如果真的是闲时才读书,那么从书籍 相伴的 Web 站点 上可以下载的 Chapter 6: Task Execution 会是更好的选择。它介绍了 Java 5 中添加的一些更高层次的并发性抽象,例如线程池,开发人员可以用它来构建并发应用程序。
|
|
捕捉当代最佳实践和研究智慧
不论一个作者如何聪明,创作一本关于并发性的当代而且实用的图书,都需要来自 Java 平台/应用程序并发性领域中跨部门的参与者提供的最佳实践和可行的解决方案(包括研究和应用两个层次)。除了 Brian 自己的研究、经验和热心读者的贡献之外,本书还吸取了一些并发性前沿人员的真知灼见,包括 Tim Peierls、Joshua Bloch、Joseph Bowbeer、David Holmes 和 Doug Lea。
覆盖范围
在 Java Concurrency in Practice 中,Brian 从最基本的知识开始介绍。本书分成四部分:
- 第 1 部分开始时集中于在 Java 平台上创建线程应用程序以及在同步对共享资源的访问时包含的细微之处。贯穿本书都用许多简洁的代码示例演示了问题和可行的解决方案。
- 第 2 部分研究了 Java SE 5 提供的更高层次的线程执行构造,以及如何最好地把它们应用到现实世界中的不同场景,其中整合了一些观察到的最佳实践和最新的研究主张。
- 第 3 部分研究了以前其他书籍曾经试图避免的真正的困难问题 —— 解决现实世界的生存保证、性能、可伸缩性和可测试性需求。每个人都认识到在这些领域没有包治百病的解决方案。Brian 把当前的最佳实践调查与相关的研究结果相结合,提供了一些可行的替代方案。
- 第 4 部分介绍了一些在开发中可能适用的高级并发性技术,包括显式锁、定制同步器、非阻塞同步,还介绍了低级的 Java 内存模型。
可以从完整 目录 了解每章的细节。
结束语
当我们从今天以应用程序为核心的开发平台转移到不远的未来支持多核处理器的操作系统和平台机制时,Java Concurrency in Practice 代表了这个容易出错的领域当前最新的并发性实践和研究。我强烈建议您去购买这本优秀的图书,并阅读它。
下载 | 描述 | 名字 | 大小 | 下载方法 |
|---|
| Chapter 2 | j-goetzbookchapter2.pdf | 185KB | HTTP |
|---|
| Table of Contents | j-goetzbookcontents.pdf | 60KB | HTTP |
|---|
参考资料 学习
讨论
关于作者
对本文的评价
|