volatile关键字修饰的变量,在主内存中是可见的,多线程取这个变量的值一定是在主内存的最新值,不会取副本的值
volatile可以避免虚拟机指令重排序,在多线程中可以保证按序执行
这也是为什么单例模式要用volatile修饰单例变量
public class SingleInstance{
private SingleInstance(){}
private static volatile SingleInstance instance = null;
public staic SingleInstance getInstance(){
if (instance == null){
synchronized(SingleInstance.class) {
if (instance == null){
instance = new SingleInstance();
}
}
return instance;
}
}