DCL虽然在一定程度上解决了资源消耗、多余的同步、现成安全问题,但是还是在某些情况下会出现失效问题。成为双重检查锁定(DCL)失效。
建议使用如下代码:
package demo;
public class Singleton {
private Singleton() {
}
public static Singleton getInstance() {
return SingletonHolder.sInstance;
}
private static class SingletonHolder {
private static final Singleton sInstance = new Singleton();
}
}
这种方法不仅能保证现成安全,也能够保证对象的唯一性,同事也延迟了单例的实例化,所以这是推荐使用的单例模式实现方式。