标签
内容简介
《Java并发编程实战》(原书名 Java Concurrency in Practice)是 Java 并发领域公认的经典著作,作者团队来自 Java Community Process 中负责并发工具(JSR 166)的专家组,java.util.concurrent 包中相当多的 API 即出自他们之手。本书并不满足于罗列 API 清单,它更侧重于讲清这些并发工具为何存在、如何正确使用,以及背后的设计原则、模式和思维模型。 全书分为四部分、共 16 章。第一部分“基础知识”从并发性与线程安全性的概念讲起,讨论原子性、竞态条件、内置锁与重入、对象的可见性与安全发布、线程封闭与不变性,以及如何把小型线程安全类组合成更大的线程安全组件。第二部分“结构化并发应用程序”围绕任务执行展开,介绍 Executor 框架、任务的取消与关闭、线程池的配置与扩展,并以图形界面等单线程子系统为例说明并发与响应性的关系。第三部分“活跃性、性能与测试”分析死锁等活跃性危险,讲解 Amdahl 定律、锁竞争与上下文切换开销,并给出并发程序正确性测试与性能测试的方法。第四部分“高级主题”深入显式锁、AQS 与自定义同步器、原子变量与非阻塞算法,最后落到 Java 内存模型这一理论基础。 书中穿插大量贴近真实工程的示例与“危险”代码片段,帮助读者建立判断并发代码正确性的直觉。本书曾获第 16 届 Jolt 大奖提名,是 Java 后端、中间件与框架开发者绕不开的一本进阶读物。阅读前需具备一定的 Java 语法与面向对象基础。
编辑推荐
市面上的 Java 并发书大致分两类:一类讲 API 怎么调,一类讲原理讲到让人望而生畏。这本书罕见地两头都占:它的作者就是 java.util.concurrent 的设计者,讲的不是二手转述,而是一手设计意图。 最值得称道的是它的“工程感”。书中给出的不是孤立的语法点,而是判断标准:这段代码安全吗?这个锁会不会带来性能陷阱?这个线程池大小是否合理?为什么这个看似同步的类仍然会失效?作者用大量“正确 vs 错误”的对照代码,把抽象的 happens-before 规则落成可以照着检查的清单。 当然,这本书成书于 Java 5/6 时代,书中关于 GUI 单线程模型、部分性能对比的内容已经有些年代感,Java 8 之后出现的 CompletableFuture、并行流、虚拟线程等新特性也不在覆盖范围内。但正因如此,它更像是在打地基:把内存模型、可见性、锁的语义这些不变的底层概念讲透,后面学任何新框架都事半功倍。这也是它十几年长销、豆瓣评分稳定在 9 分以上的原因。
适合谁读
适合
- 有 Java 基础、希望系统攻克并发与多线程的中高级开发者
- 需要维护或排查线上并发问题的后端、中间件工程师
- 准备阅读 JUC 源码、想理解其设计意图的框架学习者
- 计算机专业高年级学生与研究生作为并发课程配套读物
不适合
- 完全没有 Java 语法基础、尚未写过类的初学者
- 只想速查 API 用法、需要即查即用手册的读者
- 希望学习 Java 8 之后 CompletableFuture、虚拟线程等新特性的读者
阅读建议
- 第一遍通读第1—5章打牢线程安全与对象共享的基础,不要跳读第3章可见性。
- 第6—9章建议边读边用 Executor 框架重写自己项目里的线程创建代码,形成肌肉记忆。
- 第13—16章较硬,可配合 OpenJDK 中 JUC 源码与《Java 语言规范》第17章对照阅读。
- 读完后做一份“并发缺陷自查清单”,把书中的规则整理成团队代码评审条目。
出版社简介
机械工业出版社
中国 · 成立于 1950 年
机械工业出版社(China Machine Press)在科技与专业出版之外,库内图书还体现出对心理学、计算机、管理、财经与社科等方向的持续关注。心理学方面收入荣格作品及分析心理学导论,并涉及压力与健康、成瘾与疗愈等应用议题;计算机领域有《计算机程序的构造和解释(JavaScript版)》;管理与财经类包括《管理行为(原书第4版)》《不平等的代价(珍藏版)》《这次不一样:八百年金融危机史(纪念版)》;科学哲学与科学史方面则有《世界观(原书第3版)》。相关作者资源涵盖C.G.荣格、威廉·麦圭尔、索努·沙姆达萨尼、加博尔·马泰等。公开资料有限,以上仅据库内图书归纳其出版面貌。
目录
- 对本书的赞誉
- 译者序
- 前言
- 第1章 简介(并发简史 / 线程的优势 / 线程带来的风险 / 线程无处不在)
- 第一部分 基础知识
- 第2章 线程安全性(原子性、竞态条件、加锁机制、用锁来保护状态)
- 第3章 对象的共享(可见性、发布与逸出、线程封闭、不变性、安全发布)
- 第4章 对象的组合(设计线程安全的类、实例封闭、线程安全性的委托)
- 第5章 基础构建模块(同步容器类、并发容器、阻塞队列、同步工具类)
- 第二部分 结构化并发应用程序
- 第6章 任务执行(Executor框架、找出可利用的并行性)
- 第7章 取消与关闭
- 第8章 线程池的使用(配置与扩展ThreadPoolExecutor)
- 第9章 图形用户界面应用程序
- 第三部分 活跃性、性能与测试
- 第10章 避免活跃性危险(死锁、死锁的避免与诊断)
- 第11章 性能与可伸缩性(Amdahl定律、减少锁的竞争)
- 第12章 并发程序的测试(正确性测试、性能测试)
- 第四部分 高级主题
- 第13章 显式锁(Lock与ReentrantLock、读-写锁)
- 第14章 构建自定义的同步工具(条件队列、AbstractQueuedSynchronizer)
- 第15章 原子变量与非阻塞同步机制
- 第16章 Java内存模型
- 附录A 并发性标注
- 参考文献
常见问题
这本书适合零基础或刚学 Java 的人读吗?
不太适合。书中默认读者熟悉 Java 语法、异常、集合框架与基本的面向对象设计,开篇就直接讨论原子性和竞态条件。初学者建议先掌握 Java 基础并写过一两个多线程小程序,再读此书会顺畅很多。
2012 年的版本现在读会不会过时?
核心内容不过时。线程安全、可见性、锁语义、Java 内存模型、AQS 等底层机制至今未变,JUC 的设计思路也仍是现代并发的基础。但书中未覆盖 Java 8 的 CompletableFuture、并行流以及后续的虚拟线程,这部分需要另找资料补充。
它和《Java并发编程实践》(电子工业出版社2007年版)是同一本书吗?
是同一本英文原书 Java Concurrency in Practice 的不同中文译本。电子工业出版社2007年版由韩锴、方秒翻译,书名为《JAVA并发编程实践》;机械工业出版社2012年版由童云兰翻译,书名为《Java并发编程实战》,即通常所说的“Java 并发编程实战”。
这本书对面试或实际工作帮助大吗?
帮助很大。面试中常考的 happens-before、volatile 与 synchronized 区别、线程池参数与拒绝策略、AQS 原理、死锁排查等,书中都有系统讲解;工作中排查线程安全缺陷、合理配置线程池也能直接套用书里的判断方法。
读完需要多长时间?
全书 16 章约 300 页,按每周读 2—3 章、并动手敲示例的节奏,一般 6—8 周可以读完一遍。第13—16章建议放慢速度,配合源码阅读,二刷时再重点攻克。
读者评论
查询本书
本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。