单例模式-懒汉式,是单例模式的一种经典方式。涉及到双重检测锁DCL,volatile等。
采用双锁机制,安全且在多线程情况下能保持高性能。
进行了两次的判断,第一次是为了避免不要的实例,第二次是为了进行同步,避免多线程问题。
由于instance = new SingletonDemo3();对象的创建在JVM中可能会进行重排序,在多线程访问下存在风险,使用volatile修饰instance实例变量有效,解决该问题。
实现比较困难,一般不推荐使用。
DCL(Double Check Lock)
public class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton() {}
public static Singleton getInstance() {
//第一次检测
if (uniqueInstance == null) {
synchronized (Singleton.class) {
//第二次检测
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}