qq_30680953 2016-03-15 05:57 采纳率: 100%
浏览 2688
已采纳

多线程间,变量可见性问题。一个线程会永远看不到另一个线程的更新吗?

作者说,由于读线程可能永远发现不了main对ready变量的修改就会永远循环下去,但是貌似不太可能永远读不到main对ready变量修改之后的值吧,可能会由于从栈区复制回堆区时,有几毫秒的误差,read线程读到的是旧值,但堆区值更新之后,read线程就读到了新值了吧,为什么说会永远循环下去呢?图片说明

  • 写回答

6条回答 默认 最新

  • qq_30680953 2016-03-16 00:49
    关注

    再回去又读了一遍,有如下解释:
    根据JVM设置,如果设置成server模式会有指令重排,如上述循环判断就会变成if(!ready){while(true){...}}所以就会造成死循环,如果设置成volatile,JVM就不会对这个变量进行指令重排。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?