可见性问题
来源: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
不是呢,其实主要看哪个线程被调度,这两个线程都有概率能执行的。
00 -
翔仔
2021-10-09
同学好,我这边执行的时候是会被卡住的呢,给num加上volatile就能过
012021-10-09
相似问题