双重检测锁的替换方案

2019-05-15  本文已影响0人  晨暮时代

原文来自: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 在此处即表现为一个单例对象。甚至比上例更加简明。

上一篇 下一篇

猜你喜欢

热点阅读