Java Concurrency in Practice 是一本讲解 JVM 下并发编程知识的经典作品,建议有志于资深的 Java 工程师将其纳入自己的读书计划中,相信一定会大有裨益。

在阅读这本书的过程中,我发现中文版本有很多显而易见的错误,尤其是代码里条件判断有时根本是反着来的(本应是>=的条件,书里面却是<)。Google 搜索之后发现在 http://jcip.net/errata.html 有英文原版的勘误表,由于中文版本没有勘误表,故翻译在此,希望可以有所帮助。

使用之前请确认自己手中的书籍版本是否相符。

本文适用的中文版本

  • 书名:《Java 并发编程实战》,Java Concurrency in Practice
  • 作者:Brain Goetz, Tim Peierls 等
  • 译者:童云兰 等
  • ISBN:978-7-111-37004-8
  • 出版社:机械工业出版社
  • 出版时间:2012.2 第一版,2018.9 重印
  • 定价:69 元
  • 豆瓣链接:https://book.douban.com/subject/10484692/

勘误数据来源

官方勘误表

中文版勘误表

页码 勘误
p.5 程序清单 1-1 下面的第一段,someVariable++应为value++
p.6 程序清单 1-2,Value应为value
p.53 4.3 节上面的最后一段,getLocation应为getLocations
p.58 程序清单 4-11,SafePoint(int x, int y)构造函数的函数体可以精简为set(x, y)
p.62 程序清单 4-16,if(contains)应为if(!contains)
p.75 5.3.1 第一段,DiskCrawler应为FileCrawler
p.100 程序清单 6-7 下面第二段,在 ExcutorService 关闭后提交的任务将由“拒绝执行处理器(Rejected Execution Handler)来处理表述有误,Rejected Execution Handler是仅在ThreadPoolExecutor实现中提供的,并非所有的ExecutorService实现都具备此功能
p.122 第二行,那么调用 close 或 wakeup 方法会使线程抛出 ClosedSelectorException,只有close方法会抛出该异常,wakeup方法不会
p.163 程序清单 9-6,第一个if(runningTask != null)判断条件应为(runningTask == null)
p.214 程序清单 12-9,Executors.newFixedThreadPool(MAX_SIZE)方法调用应该增加第二个参数threadFactory
p.229 程序清单 13-3,代码倒数第三行if (System.nanoTime() < stopTime)判断条件里的<应为>=

以上就是中文版《Java 并发编程实战》的勘误表,如有遗漏,欢迎通过文末留言联系我进行补充。