指令重排序,导致双检锁可能出现问题
主要是创建对象,这块不是原子性的,导致可能出现空指针问题
1,我们先来看一段双检锁的代码
private static Client instance;
public static Client getInstance(){
if(instance == null){
synchronized (Client.class){
if(instance == null){
//0,创建对象的过程
//1,在内存中开辟空间
//2,在这个空间里实例化对象
//3,将这个实例对象指向这个空间地址
instance = new Client();
}
}
}
return instance;
}
2,解决的办法,给instance 加上volatile 修饰即可,这样可以禁止指令重排序,导致返回空对象问题