Java并发编程实战

Brian Goetz

出版时间

2012-01-31

ISBN

9787111370048

评分

★★★★★

标签

编程

书籍介绍

本书深入浅出地介绍了Java线程和并发,是一本完美的Java并发参考手册。书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险、构造线程安全的类及验证线程安全的规则,如何将小的线程安全类组合成更大的线程安全类,如何利用线程来提高并发应用程序的吞吐量,如何识别可并行执行的任务,如何提高单线程子系统的响应性,如何确保并发程序执行预期任务,如何提高并发代码的性能和可伸缩性等内容,最后介绍了一些高级主题,如显式锁、原子变量、非阻塞算法以及如何开发自定义的同步工具类。

本书适合Java程序开发人员阅读。

AI导读
核心看点
  • 深入解析Java内存模型与线程安全性
  • 系统讲解锁机制、Volatile及原子变量
  • 提供构建线程安全类的实战设计规则
适合谁读
  • Java后端开发与系统架构师
  • 希望深入理解并发原理的程序员
  • 面临高并发性能瓶颈的技术人员
读前提醒
  • 建议结合源码阅读以加深理解
  • 注意区分本书与《Java并发编程实践》
  • 部分章节较难,建议反复研读与实践
读者共识
  • 内容经典权威,是并发领域必读之作
  • 中文版翻译质量参差不齐,影响阅读
  • 理论扎实但需配合大量编码实践

本导读基于书籍简介、目录、原文摘录、短评和书评生成,不等同于全文精读。

精彩摘录
  • "加锁机制既可以确保可见性又可以确保原子性,而 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."
作者简介
本书作者都是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分校的计算机科学教授。
目录
对本书的赞誉
译者序
前 言
第1章 简介1
1.1 并发简史1

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