`
lvhuiqing
  • 浏览: 246136 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

[胡言乱语]这段代码会输出什么?

阅读更多
public class NoVisibility {
    private static boolean ready;
    private static int number;

    private static class ReaderThread extends Thread {
        public void run() {
            while (!ready)
                Thread.yield();
            System.out.println(number);
        }
    }

    public static void main(String[] args) {
        new ReaderThread().start();
        number = 42;
        ready = true;
    }
}

答案:可能会输出42,可能会输出0,也可能会一直得不到输出。
输出0的原因: number = 42;ready = true;JVM并不能保证以上两条语句按顺序执行。
得不到输出的原因:main线程中对ready的修改有并不能确保被ReaderThread线程得到。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics