JAVA并发编程实践

戈茨

出版时间

2007-06-01

ISBN

9787121043161

评分

★★★★★
AI导读
核心看点
  • 深入解析Java内存模型与线程安全核心概念
  • 详解锁、原子性及不可变对象等并发构建块
  • 提供线程池配置与任务执行的最佳实践指南
适合谁读
  • 希望系统掌握Java并发编程原理的开发者
  • 需要构建高性能、高可用后端应用的工程师
  • 对多线程编程感兴趣且有一定Java基础的读者
读前提醒
  • 中文版翻译质量参差不齐,建议参考英文原版
  • 内容偏重设计原则与底层原理,需耐心研读
  • 建议结合代码实践,避免陷入纯理论困惑
读者共识
  • Java并发领域的经典之作,理论深度极高
  • 翻译水平普遍受诟病,严重影响阅读体验
  • 虽基于旧版本JDK,但核心思想依然适用

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

精彩摘录
  • "加锁机制既可以确保可见性又可以确保原子性,而 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 并发的(非常)简短历史

显示全部
用户评论
只要想了解java并发的,都看看这本书
1. 翻译质量一般,但还能读下去 2. 主要讲设计原则,对基础设施的介绍比较泛泛 3. Java在并发这块,甩掉C/C++一条街,GC降低了并发中最复杂的一块,基础设施也很完善,各种Building Block,以及明确的Memory Model,极大降低了复杂度 4. C/C++程序员应该从Java/C#中学习这些知识
对于Java并发编程相关的技术有了比较细致和有技巧性的讲解,虽然还不够特别深入,但是对于类似我这样从其他平台转过来的,通过本书做一次整体的了解是个很不错的选择,是一本很值得精读的书。
怎么说呢,并发编程的书非常少,而且不容易理解,如果翻译的时候加上译者的理解就更好了。
书是好书,可是翻译啊翻译。。。。。!
瞎翻译。大家不要看这书,浪费时间
这版翻译的太差了,生造专有名词,语句也不通顺
算是精读了一遍 相比于网上零散的帖子 书能够给人一个更高维度的视图 还是需要整理一下笔记
几年前读过大部分,最近几年多线程开发实践太少。最近开始复读。多线程并发其实和分布式程序设计开发,底层逻辑是一致的。都需要共享资源(数据、锁等)与协调(同步与通信)……也是涉及思想层面的经典书籍。
一本工具书,入门使用挺适合的,原理部分倒是没有多少。翻译的话有些小瑕疵,我要扣一星。
下载
收藏