Java中写双重检查加锁的单例时volatile关键字作用
1.保证多进程情况下变量的可见性2.禁止 instance = new Singleton();的指令重排注意:instance = new Singleton()分解为:1.分配对象内存空间2.初始化对象3.将instance指向分配的内存空间若不加 volatile;2和3两个步骤可以指令重排;这样就会造成Instance指向了内存空间,但实际未完成对象初始化.这样会导致a线程只执行到:Instance指向了内存空间,但实际未完成对象初始化;的时候b线程判断instance != n