可见性问题

来源:3-22 是什么机制能让它"恰好"避免幻读呢?

weixin_慕先生8210094

2021-10-09

请问一下以下代码测试可见性时,为什么还是可以运行完成而不是死循环呢?是因为CPU有缓存一致性协议(MESI)吗

public class VolatileDemo {
    public static void main(String[] args) throws InterruptedException {
        MyData myData = new MyData();
        new Thread(()->{
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            myData.change();
        },"aaa").start();
        for (;;){
            if (myData.num!=0){
                break;
            }
        }
    }
}
class MyData{
    int num = 0;
    public void change(){
        this.num = 100;
    }
}
写回答

2回答

翔仔

2021-10-11

不是呢,其实主要看哪个线程被调度,这两个线程都有概率能执行的。

0
0

翔仔

2021-10-09

同学好,我这边执行的时候是会被卡住的呢,给num加上volatile就能过

0
1
weixin_慕先生8210094
额,我这边是不会卡住,难道和电脑CPU有关?我是AMD的
2021-10-09
共1条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程