最近看书看到了java缓存一致性的问题 是这些了一段代码
```java
`static int val = 0;
public static void main(String[] args) throws Exception{
new Thread(new Runnable() {
@Override
public void run() {
while (val < 5){
if(val != 0 ){
System.out.println(val);
}
}
System.out.println("over");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0;i <5; i++){
//val = i;
//val ++;
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
``
当第二条线程val ++ 注释去掉,第一个线程就能看见val的变化
当第二条线程val=i注释去掉,第一个线程就看不见val的变化陷入死循环
这是为什么