java单例模式Singleton–volatile双重检查锁
public class Singleton {
private volatile static Singleton mySingleton;
public static Singleton getInstance() {
if (mySingleton == null) {
synchronized (Singleton.class) {
if (mySingleton == null) {
mySingleton = new Singleton();
}
}
}
return mySingleton;
}
}
创建对象分三步:
1)申请内存空间: address = allocate
2)实例化对象:instance(object)
3)myinstance = address
创建对象是非原子性操作,第二步跟第三步在超高并发下可能会发生指令重排,其它线程可能会拿到属性为空的对象
通过关键字:volatile,防止对象创建过程中发生指令重排