《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(找晓明修改下)
问下各位,第一章测试提到的dump是个啥东西呀?是每个java虚拟机内置的一个线程工具吗?
尊敬的作者:
您好!我正在拜读您的《Java并发编程的艺术》,在运行(环境:Oracle JDK8)代码清单4-9 Shutdown.java的时候,发现一个有趣的现象:去掉Runner.on的volatile修饰符,线程2也能被中止。经过测试,如果同时去掉 !Thread.currentThread().isInterrupted(),那么线程2就不会中止(由于可见性)。
希望作者能帮忙解答这个现象的原因,谢谢。
第版次:2015年7月1版第1次印刷
第144页最下方导数第二行,“如果当前线程获取了 写锁 或者写锁未被获取”;此处应该是“如果当前线程获取了 读锁 或者写锁未被获取”
书上这一段没错呀,线程A尝试拿读锁流程:
1. 不超出最大锁数量
2. 有写锁存在,但不是A自己拿到的。此时不能读,进入线程等待状态。
3. 有写锁存在,但是A自己拿到的,此时可以读,成功获取写锁。
4. 没有写锁存在,可以获取读锁。
3和4组成这一句:如果当前线程获取了 写锁 或者写锁未被获取。
原子操作类,书上说是13个,但是书上提供的只有12个。并且JDK源码中atomic包下也只有12个类。
是不是搞错了?
而且书上说原子数组有4个类。。。
《Java并发编程的艺术》 4.1.4 线程的状态 Java线程状态变迁如图4-1示 ,图中有误 Thread有join(),Object 没有(图中为Object.join())
2021.10第一版第21次印刷
184页,应该为:Atomic包提供了一下3个类,就说找来找去都只找到3个,后面内容没错,只是缩进级别乱了
你好,飞哥,我在读3.6.3章节时,看到有些处理器是允许间接依赖重排序的。如果是在这种处理器上执行,读对象的普通域的操作是可能被处理器重排序到读对象引用之前,那程序的执行不是会有很大的问题,jvm有提供什么其他的保证么
LinkedBlockingQueue是有界阻塞列表,为何要修改为无界阻塞列表呢?
我去
76页,表3-9类初始化的图和白哦3-8的图是一样的 这也是印刷错误吧?