《Java并发编程的艺术》勘误和支持

本书源码下载地址

第一版第一次印刷勘误

第2页,thread.join();这句代码和上面一行代码交换位置。
第3页,第一个表格“并发比串行快多少”的第五行,慢=>差不多。
第9页,表2-1第三行缓存行。第一个缓存=》CPU高速缓存,缓存线=》缓存行,
第9页,表2-1第三行缓存行。需要使用多个主内存读周期=》现代CPU需要执行几百次CPU指令
第18页,代码少了第一行 public class Counter {

第一版第二次印刷勘误

第一版第三次印刷勘误

第一版第四次印刷勘误

  • 第168页LinkedBlockingQueue 有界阻塞队列 修改成 无界阻塞队列。
  • 第5页的源码,DeadLockDemo里面 private static String A = “A”; 这一行的private拼写少了个e。
  • 第112页的源码,work.get(count)后面少了个分号;。
  • 第186页的源码,代码第2、3行,user应改为User。
  • 第210页的图,图10-2左上角的类应该是Runnable;图10-3中有2个create漏了字母e,1个execute漏了字母2(找晓明修改下)
  • Trackback 关闭
  • 评论 (12)
    • 冰雨
    • 2021/10/12 8:25下午

    问下各位,第一章测试提到的dump是个啥东西呀?是每个java虚拟机内置的一个线程工具吗?

    • 余空行
    • 2022/02/01 3:40下午

    尊敬的作者:
    您好!我正在拜读您的《Java并发编程的艺术》,在运行(环境:Oracle JDK8)代码清单4-9 Shutdown.java的时候,发现一个有趣的现象:去掉Runner.on的volatile修饰符,线程2也能被中止。经过测试,如果同时去掉 !Thread.currentThread().isInterrupted(),那么线程2就不会中止(由于可见性)。
    希望作者能帮忙解答这个现象的原因,谢谢。

    • 土鱼
    • 2022/02/11 1:32下午

    第版次:2015年7月1版第1次印刷
    第144页最下方导数第二行,“如果当前线程获取了 写锁 或者写锁未被获取”;此处应该是“如果当前线程获取了 读锁 或者写锁未被获取”

      • +1
      • 2022/07/15 3:51下午

      书上这一段没错呀,线程A尝试拿读锁流程:
      1. 不超出最大锁数量
      2. 有写锁存在,但不是A自己拿到的。此时不能读,进入线程等待状态。
      3. 有写锁存在,但是A自己拿到的,此时可以读,成功获取写锁。
      4. 没有写锁存在,可以获取读锁。
      3和4组成这一句:如果当前线程获取了 写锁 或者写锁未被获取。

    • 张恒清
    • 2022/03/12 12:27上午

    原子操作类,书上说是13个,但是书上提供的只有12个。并且JDK源码中atomic包下也只有12个类。
    是不是搞错了?

      • Eric
      • 2023/01/21 5:26上午

      而且书上说原子数组有4个类。。。

    • 浅玉
    • 2022/03/31 4:57下午

    《Java并发编程的艺术》 4.1.4 线程的状态 Java线程状态变迁如图4-1示 ,图中有误 Thread有join(),Object 没有(图中为Object.join())

    • longjuan
    • 2022/06/17 2:23上午

    2021.10第一版第21次印刷
    184页,应该为:Atomic包提供了一下3个类,就说找来找去都只找到3个,后面内容没错,只是缩进级别乱了

    • 从零开始
    • 2022/07/28 10:45下午

    你好,飞哥,我在读3.6.3章节时,看到有些处理器是允许间接依赖重排序的。如果是在这种处理器上执行,读对象的普通域的操作是可能被处理器重排序到读对象引用之前,那程序的执行不是会有很大的问题,jvm有提供什么其他的保证么

    • luanrzh
    • 2022/08/01 2:56下午

    LinkedBlockingQueue是有界阻塞列表,为何要修改为无界阻塞列表呢?

  1. 我去

    • bb
    • 2022/12/08 10:25上午

    76页,表3-9类初始化的图和白哦3-8的图是一样的 这也是印刷错误吧?

return top