《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 关闭
  • 评论 (22)
    • 夜阳
    • 2015/08/11 12:11上午

    18页代码少了第一行public class Counter {

    76页表3-9把表3-8复制了一遍,完全错误

    • 下雨不打伞
    • 2015/09/06 9:17上午

    第5页的源码,DeadLockDemo里面 private static String A = “A”; 这一行的private拼写少了个e

    • abyjun
    • 2015/09/13 9:01下午

    请问,37页的图中的读事物写的是读高32位,是不是应该改为读整个long型变量

    • yangcheng33
    • 2015/10/07 5:56下午

    210页,图10-2左上角的类应该是Runnable;图10-3中有2个create漏了字母e,1个execute漏了字母2
    186页,代码第2、3行,user应改为User

    • yangcheng33
    • 2015/10/08 1:40上午

    112页,代码倒数第12行,漏掉了分号

    • 爪云
    • 2015/12/28 9:55上午

    31页, 第五行, volaLile 拼写错误, 应该是volatile

    • wuxiaolinchn
    • 2016/01/17 10:44上午

    5页,1.2死锁代码,2个重写Runnable接口的run方法都写成了publicvoid,两个关键字之间缺少空格。

    • qiguan123
    • 2016/01/27 7:24下午

    164页最后一行,应该是“如果p的next节点是null”吧。

    • superheizai
    • 2016/02/01 12:06下午

    59页,第三章,3.6.5标题,“溢出”==》“逸出”
    69,第三种,3.8.2第一行,(instance=new Singleton();),实际上例子给的是(instance= new Instance():)

    • superheizai
    • 2016/02/02 9:38上午

    虽然么有回复,但是我要继续报错:)
    第五章,5.2.2中5.自定义同步组件-TwinsLock部分,关于资源数的描述部分,“status为2”应该是“state为2”。
    第六章, 6.1.3的2.初始化segmentShift和segmentMask,其中”segmentSHift最大值是16″,不是最大值,是最小值。

    • 魏 鹏
    • 2016/04/06 11:28上午

    第三页

    Content Switch –> Context Switch

      • yoxibaga
      • 2016/10/06 4:58下午

      魏老师,请教一个问题,第四章最后【基于线程池的简单Web服务器】的demo,server启动之后,URL如何写呢?basepath = ‘F:\\workspace’

    • xiaohaizi
    • 2016/04/27 8:51下午

    你好 ,第4.4.4小节,115页 代码中 out.flush() 应该在socket.getOutputStream().write(array,0,array.length);之前调用,
    否则,内容会先于报文头发送。

    • sirding
    • 2016/09/08 5:20下午

    338页
    “因为CyclicBarrier设置了拦截线程的数量是2,所以必须等代码中的第一个线程和线程A 都执行完之后,才会继续执行主线程,然后输出2,所以代码执行后的输出如下。”

    逻辑应该是A线程一定是先执行的,但第一个线程和主线程的执行顺序是不一定的。所以执行的结果应该3、2、1或是3、1、2

    • MindHacks
    • 2016/12/21 9:40下午

    您好,第12页,第5行,第8行的Synchronized拼写错误,被拼成了Synchonized

    • 16789Mauersu
    • 2017/01/12 5:09下午

    对P134页的TwinsLock的unlock方法存疑

    public boolean tryReleaseShared(int returnCount) {
    for(;;) {
    int current = getState();
    int newCount = current + returnCount;
    if(compareAndSetState(current, newCount)) {
    return ture;
    }
    }
    }
    unlock方法及调用方法,都没有对当前线程进行判断,判断其是否持有锁,我觉得应该加上这个判断,因为只有持有所得线程才能释放锁

您必须 登陆 后才能发表评论

return top