Java并发编程实战

Brian Goetz

出版时间

2012-01-31

ISBN

9787111370048

评分

★★★★★

标签

编程

书籍介绍
这本书在读者口中呈现出一种鲜明的撕裂感:有人称它为并发编程的必读书、五颗星推荐,有人却骂翻译者“是个罪犯”、直呼“浪费生命”。正因如此,它更适合那些已经踩过线程坑、带着真实困惑回来的人——一个用Java五六年、真正入了多线程门的人,会觉得它讲得“全”而清晰;而刚接触并发的读者,很可能翻到JMM(Java内存模型)和volatile部分就半途而废,抱怨“怎么做才是对的”讲得不够。它不教你花哨技巧,而是把安全性、活跃性、性能三条主线反复打磨:加锁与volatile的边界、不可变对象与final安全初始化、线程池大小如何随资源而变。它的价值在于帮你建立“为什么这样才对”的判断力,它的短板是深度止步于概念、翻译拖了后腿。适合有一定基础、愿意对照源码补全细节的开发者,不适合指望它一步到位的新手。
作者简介
本书作者都是Java Community Process JSR 166专家组(并发工具)的主要成员,并在其他很多JCP专家组里任职。 Brian Goetz有20多年的软件咨询行业经验,并著有至少75篇关于Java开发的文章。 Tim Peierls是“现代多处理器”的典范,他在BoxPop.biz、唱片艺术和戏剧表演方面也颇有研究。 Joseph Bowbeer是一个Java ME专家,他对并发编程的兴趣始于Apollo计算机时代。 David Holmes是《The Java Programming Language》一书的合著者,任职于Sun公司。 Joshua Bloch是Google公司的首席Java架构师,《Effective Java》一书的作者,并参与著作了《Java Puzzlers》。 Doug Lea是《Concurrent Programming》一书的作者,纽约州立大学Oswego分校的计算机科学教授。
AI导读
核心看点
  • 深入解析Java内存模型与线程安全性
  • 系统讲解锁机制、Volatile及原子变量
  • 提供构建线程安全类的实战设计规则
读者共识
  • 内容经典权威,是并发领域必读之作
  • 中文版翻译质量参差不齐,影响阅读
  • 理论扎实但需配合大量编码实践
精彩摘录
  • "加锁机制既可以确保可见性又可以确保原子性,而 volatile 变量只能确保可见性。 当且仅当满足以下所有条件时,才应该使用 volatile 变量: - 对变量的写入操作不依赖变量的当前值,或者你能确保只有单个线程更新变量的值。 - 该变量不会与其它状态变量一起纳入到不变性条件中。 - 在访问变量时不需要加锁。"
  • "当满足以下条件时,对象才是不可变的: - 对象创建以后其状态就不可修改 - 对象的所有域都是 final 类型 - 对象时正确创建的(在对象的构造期间,this 引用没有逸出) 从技术上来看,不可变对象并不需要将其所有的域都声明为 final 类型,例如 String 就是这种情况,这就要对类的良性数据竞争情况做精确的分析,因此需要深入理解 Java 的内存模型。... 自己在编码时不要这么做。"
  • "对于计算密集的任务,在拥有 N 个处理器的系统上,当线程池大小为 N+1 时,通常能实现最优的利用率。(即使当计算密集型的线程偶尔由于页缺失故障或者其它原因而暂停时,这个“额外”的线程也能确保 CPU 的时钟周期不会被浪费。)对于包含 I/O 操作或者其它阻塞操作的任务,由于线程并不会一直执行,因此线程池的规模应该更大。 计算每个任务对该资源的需求量,然后用该资源的可用总量除以每个任务的需求量,所得结果就是线程池大小的上限。"
  • "当任务需要某种通过资源池来管理的资源时,例如数据库连接,那么线程池和资源池的大小将会相互影响。如果每个任务都需要一个数据库连接,那么连接池的大小就限制了线程池的大小。同样,当线程池中的任务是数据库连接的唯一使用者时,那么线程池的大小又将限制连接池的大小。"
  • "final域能确保初始化过程的安全性,从而可以不受限制的访问不可变对象,并在共享这些对象时无需同步。"
  • "只有当volatile变量能够简化实现和同步策略的验证时,才使用它们。当验证正确性必须推断可见性问题时,应该避免使用volatile变量。正确使用volatile变量的方式包括:用于确保它们所引用的对象的状态的可见性,或者用于标识重要的生命周期事件(比如初始化或关闭)的发生。"
  • "To publish an object safely, both the reference to the object and the object's state must be made visible to other threads at the same time. A properly constructed object can be safely published by: Initializing an object reference from a static initializer; Storing a reference to it into a volatile"
  • "Our goal is to give readers a set of design rules and mental models that make it easier—and more fun—to build correct, performant concurrent classes and applications in Java."
目录
对本书的赞誉
译者序
前 言
第1章 简介1
1.1 并发简史1

显示全部
用户评论
浅尝辄止...
jmm那块讲得不是很全,并发包还是要看看源码,其他基础知识点很全。
比07年那版翻译要好。有些地方还是要对照英文看。
...原来只是再出版了下...书还是当年的那本,好吧。
一年内看到最好的技术书,回头多看几遍
经典经典,赞赞赞
专业 推荐,对并发有很好的理解
不可多得的好书。解答了我关于Java和并发很多自以为的是的观念。话题不止于并发编程,还讨论到系统的设计(比如出现好几次的对JDK的吐槽,很有意思)。可惜翻译不够好,仅仅是能读的地步
跟国人写的几本java并发的书比较,更多的是理论和设计层面的分享。
薄薄地一本小书,但是很全面地介绍了并发编程方面的知识。开始的基础知识是重点,一定要花时间理解,理解后才能入门。书中的代码大部分都不完整,如果有的例子理解困难,可以上网找找其他的示例,也许会更容易理解。
下载
收藏