指令重排序,导致双检锁可能出现问题

主要是创建对象,这块不是原子性的,导致可能出现空指针问题

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 修饰即可,这样可以禁止指令重排序,导致返回空对象问题