1.懒汉模式:延迟加载,只有正在使用的时候,才开始实例化
1.线程安全问题
2.double check 加锁优化
3.编译器(JIT),CPU有可能对指令进行重排序,导致使用到尚未初始化的实例,可以通过添加volatile关键字进行修饰。对于volatile修饰的字段,可以防止指令重排。
class A_Singleton{
/**
* 如果不加 volatile
* 那么在 instance = new A_Singleton();
* 可能 1.分配空间 2.引用赋值 3.初始化
* 如果第二个线程来,instance刚哈已经走完第二步(2.引用赋值) 那么进来后instance已经有值了,就直接返回可能就会出现空指针
*/
private volatile