Volatile保证数据可见性,就是只保证数据同步性,轻量级synchronized,防止指令重排,但是不能保证原子性。
如果没有加 volatile,下面的代码就会死循环。
public class VolatileTest {
private /*volatile*/ static boolean flag = true;
public static void main(String[] args) {
new Thread(()->{
while (flag){
//里面不要写代码
}
}).start();
try {
Thread.sleep(1000);
flag = false;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}