标签
内容简介
本书是 Java 并发领域的经典著作《Java Concurrency in Practice》的中文译本,由 JSR 166 专家组(java.util.concurrent 并发工具包的制定者)主要成员 Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowbeer、David Holmes 与 Doug Lea 联合撰写。全书以 Java SE 5、6 引入的并发新特性为背景,从并发性与线程安全性的基本概念出发,依次讲解原子性、加锁机制、对象共享与安全发布、线程安全类的设计与组合、同步容器与并发容器、阻塞队列与生产者—消费者模式、同步工具类,以及 Executor 框架、任务取消与关闭、线程池配置等结构化并发应用技术。 在此基础上,书中进一步讨论死锁等活跃性危险的识别与规避、性能与可伸缩性的度量与优化(含 Amdahl 定律、减少锁竞争、上下文切换开销)、并发程序的正确性与性能测试,并深入显式锁与 ReentrantLock、读写锁、条件队列、AbstractQueuedSynchronizer、原子变量与非阻塞算法,最后以 Java 内存模型与安全发布收尾。全书强调的不仅是 API 怎么用,更是“为什么要这样设计”,为读者建立可复用并发程序的设计原则、模式与心智模型。
编辑推荐
《Java并发编程实践》并非一本罗列 API 的手册,它回答的是“为什么会出错”与“怎样才能不出错”。六位作者均为 JSR 166 专家组核心成员,java.util.concurrent 里的那些类就是他们亲手设计并写入规范的,因此书中关于同步容器与并发容器、Executor、线程池、AQS 的讲述带着设计者视角的“内部消息”,这是绝大多数教程难以替代的。 全书结构清晰:基础(线程安全、对象共享与组合、构建块)→ 结构化并发应用(任务执行、取消与关闭、线程池、GUI)→ 活跃性、性能与测试 → 高级主题(显式锁、自定义同步工具、原子变量与非阻塞、Java 内存模型)。它把可见性、原子性、有序性这些原本模糊的概念落到代码与内存模型的因果链上,配合贯穿全书的实例与“危险模式”警示,读者可以边读边对照自己的项目。 需要提醒的是,2007 年电子工业版译文质量存在争议,术语与行文偶有生硬之处;若追求更顺畅的阅读体验,可参考机械工业出版社 2012 年童云兰译本《Java并发编程实战》。
适合谁读
适合
- 有 Java 基础、写过简单多线程代码,希望系统补齐并发知识体系的开发者
- 正在处理线上并发缺陷(数据错乱、偶发死锁、切换开销大)的后端工程师
- 需要设计线程安全类与基础组件、想理解 JDK 并发包设计取舍的架构师
- 讲授 Java 并发课程、需要权威参考框架的高校教师与培训讲师
不适合
- 完全没写过 Java、连语法与集合框架都不熟悉的零基础读者
- 只想复制粘贴代码、不愿意思考内存模型与设计原则的读者
- 主要使用 Go、Rust、C++ 等其他语言并寻求对应并发方案的读者
阅读建议
- 先通读第 2—5 章第一部分,把原子性、可见性、安全发布三个概念吃透,这是全书地基。
- 第二部分建议对照 JDK 源码与自己的项目阅读,读完每章就把 Executor、线程池配置用到实际代码里。
- 第 13—16 章属高级主题,可在遇到自定义同步器或排查内存可见性问题时再精读,不必强求一次读完。
- 书中示例代码可下载后亲手运行并故意制造竞态,再对照书中的修复方式,效果远好于只看不练。
出版社简介
电子工业出版社
中国 · 成立于 1982 年
电子工业出版社是一家以电子信息及相关领域为出版特色的综合性出版社。从库内三千余种图书来看,其出版方向覆盖编程设计、人工智能、计算机综合、财经、摄影与社科等门类,既关注技术前沿,也兼顾大众阅读。代表图书包括《因子投资:方法与实践》《x86汇编语言:从实模式到保护模式》《RISC-V开放架构设计之道》《人工智能:语音识别理解与实践》《相控阵雷达技术》《雷达目标特性》及《100个Go语言典型错误》等,多围绕技术方法与工程实践展开。作者资源方面,有石川、李忠、王晓波、大卫·帕特森、安德鲁·沃特曼、余子濠等中外作者。受公开资料所限,暂不展开更多出版特色。
目录
- 代码清单
- 序
- 第1章 介绍(1.1 并发的简短历史;1.2 线程的优点;1.3 线程的风险;1.4 线程无处不在)
- 第1部分 基础
- 第2章 线程安全(2.1 什么是线程安全性;2.2 原子性;2.3 锁;2.4 用锁来保护状态;2.5 活跃度与性能)
- 第3章 共享对象(3.1 可见性;3.2 发布和逸出;3.3 线程封闭;3.4 不可变性;3.5 安全发布)
- 第4章 组合对象(4.1 设计线程安全的类;4.2 实例限制;4.3 委托线程安全;4.4 向已有的线程安全类添加功能;4.5 同步策略的文档化)
- 第5章 构建块(5.1 同步容器;5.2 并发容器;5.3 阻塞队列和生产者—消费者模式;5.4 阻塞和可中断的方法;5.5 Synchronizer;5.6 为计算结果建立高效、可伸缩的高速缓存)
- 第2部分 构建并发应用程序
- 第6章 任务执行(6.1 在线程中执行任务;6.2 Executor 框架;6.3 寻找可强化的并行性)
- 第7章 取消和关闭(7.1 任务取消;7.2 停止基于线程的服务;7.3 处理反常的线程终止;7.4 JVM 关闭)
- 第8章 应用线程池(8.1 任务与执行策略间的隐性耦合;8.2 定制线程池的大小;8.3 配置 ThreadPoolExecutor;8.4 扩展 ThreadPoolExecutor;8.5 并行递归算法)
- 第9章 GUI 应用程序(9.1 为什么 GUI 是单线程化的;9.2 短期的 GUI 任务;9.3 耗时 GUI 任务;9.4 共享数据模型;9.5 其他形式的单线程子系统)
- 第3部分 活跃度、性能和测试
- 第10章 避免活跃度危险(10.1 死锁;10.2 避免和诊断死锁;10.3 其他的活跃度危险)
- 第11章 性能和可伸缩性(11.1 性能的思考;11.2 Amdahl 定律;11.3 线程引入的开销;11.4 减少锁的竞争;11.5 示例:比较 Map 的性能;11.6 减少上下文切换的开销)
- 第12章 测试并发程序(12.1 测试正确性;12.2 测试性能;12.3 避免性能测试的陷阱;12.4 测试方法补遗)
- 第4部分 高级主题
- 第13章 显式锁(13.1 Lock 和 ReentrantLock;13.2 对性能的考量;13.3 公平性;13.4 在 synchronized 和 ReentrantLock 之间进行选择;13.5 读—写锁)
- 第14章 构建自定义的同步工具(14.1 管理状态依赖性;14.2 使用条件队列;14.3 显式的 Condition 对象;14.4 剖析 Synchronizer;14.5 AbstractQueuedSynchronizer;14.6 java.util.concurrent 中的 AQS)
- 第15章 原子变量与非阻塞同步机制(15.1 锁的劣势;15.2 硬件对并发的支持;15.3 原子变量类;15.4 非阻塞算法)
- 第16章 Java 内存模型(16.1 什么是内存模型,为什么需要它;16.2 发布;16.3 初始化过程中的安全性)
- 附录A 同步 Annotation
- 参考文献
- 索引
常见问题
《Java并发编程实践》和《Java并发编程实战》是同一本书吗?
是同一本英文原著《Java Concurrency in Practice》的不同中文版:电子工业出版社 2007 年版译名为“实践”,译者为韩锴、方秒,ISBN 9787121043161;机械工业出版社 2012 年版译名为“实战”,译者童云兰,ISBN 9787111370048,豆瓣评分约 9.0。
这本书的六个作者是什么背景?
六人均为 Java Community Process 中 JSR 166(并发工具)专家组的主要成员,也就是说 java.util.concurrent 包的设计与规范出自他们之手。Brian Goetz 后来成为 Oracle 的 Java 语言架构师,Joshua Bloch 是《Effective Java》的作者,Doug Lea 则是并发编程领域的学者。
书中内容是否已经过时,还能读吗?
书基于 Java SE 5/6 编写,没有涉及 CompletableFuture、Fork-Join 之外的虚拟线程等新特性,但对线程安全、内存模型、锁与无锁算法、线程池原理的论述仍是该领域最扎实的内容,作为基础教材完全不过时,阅读后再补充新版本 JDK 的并发特性即可。
阅读前需要怎样的 Java 基础?
建议熟悉 Java 语法、集合框架、异常与泛型,最好写过 SimpleDateFormat 共享、静态变量计数之类的多线程代码或至少接触过 synchronized 与 Thread。若完全没接触过多线程,可先读一本 Java 入门书中线程章节再回来。
这本书有配套源码或练习吗?
英文原书提供示例代码包(jcip-examples-src),中文版在开头列出代码清单,正文中的示例基本都可对应运行。书中没有习题册,建议把每章的“危险示例”自己复现,再做修复实验。
读者评论
查询本书
本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。