原文来自:https://www.baeldung.com/java-singleton-double-checked-locking
根据原文写出如下替换案例:
public class InitOnDemandSingleton {
InitOnDemandSingleton() {
System.out.println("InitOnDemandSingleton");
}
private static class InstanceHolder {
InstanceHolder() {
System.out.println("InstanceHolder");
}
private static final InitOnDemandSingleton INSTANCE = new InitOnDemandSingleton();
}
public static InitOnDemandSingleton getInstance() {
System.out.println("getInstance()");
return InstanceHolder.INSTANCE;
}
public static void main(String[] agrs) {
InitOnDemandSingleton.getInstance();
}
}
其中静态内部类InstanceHolder 只有在加载的时候才初始化,也就是说,当调用getInstance()方法时,INSTANCE才会初始化,仍旧实现了懒加载。
除此之外,还有Enum Singleton方案。案例如下:
public enum EnumSingleton {
INSTANCE;
public void metho01(String msg) {
System.out.println(msg);
}
public void metho02(String msg) {
System.out.println(msg);
}
}
调用方式为:
EnumSingleton.INSTANCE.metho01("执行方法1");
EnumSingleton.INSTANCE.metho02("执行方法2");
EnumSingleton 在此处即表现为一个单例对象。甚至比上例更加简明。
网友评论