比如代码
boolean isTrue = true;
while (isTrue){
//...
}
在循环判断执行一定次数,变量isTrue的值一直为true,则CPU就会将该代码进行指令重排
boolean isTrue = true;
if (isTrue) {
//...
}
变成if(true),这样在变量isTrue的值被更改后,还是不会出现
又比如代码如果在多线程的情况下
//线程A
int a = 10;
a = 20;
boolean flag = true;
线程B中的代码
//线程B
while(flag){
System.out.println(a);
}
如果指令重排将flag赋值true指令重排在 a = 20之前的话,输出的结果就会不一样了
线程与主内存进行交互,中间还有层CPU高速缓存,而这段进出高速缓存期间也有极小的可能出现数据不一致的问题
何为可见性?
让一个线程对共享变量的修改,能够及时的被其他线程看到 。
volatile为何能实现线程间的可见?
java内存模型中规定:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- haog.cn 版权所有 赣ICP备2024042798号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务