JAVAJ单例模式的五种实现方式

//饿汉式
class Single1{
    private static final Single1 instance = new Single1();

    private Single1(){}

    public static Single1 getInstance() {
        return instance;
    }
}

//懒汉式(线程不安全)
class Single2{
    private static Single2 instance = null;

    private Single2(){}

    public static Single2 getInstance() {
        if(instance == null){
            instance = new Single2();
        }
        return instance;
    }
}

//懒汉式(加锁)
class Single3{
    private static Single3 instance = null;

    private Single3(){}


    public static synchronized Single3 getInstance(){
        if(instance == null){
            instance = new Single3();
        }
        return instance;
    }
}

//懒汉式(双重检查)
class Single4{
    private static Single4 instance = null;

    private Single4(){}

    public static Single4 getInstance() {
        if(instance == null){
            synchronized (Single4.class){
                if(instance == null){
                    instance = new Single4();
                }
            }
        }
        return instance;
    }
}

//懒汉式(枚举实现)
enum Single5{
    INSTANCE();

    private String msg;

    private Single5(){
        System.out.println("单例初始化");
    }
}

  

posted @ 2021-06-16 15:38  一穷三白  阅读(80)  评论(0)    收藏  举报