单例模式

2019-06-06  本文已影响0人  小明17

单例模式有多种简单的写法,饿汉式、懒汉式、单线程式等等,但考虑到多线程下的线程安全以及性能问题,推荐以下三种写法。

但是,上面提到的所有实现方式都有两个共同的缺点:

还有,不管采取何种方案,请时刻牢记单例的三大要点:

推荐写法1:

public class Singleton{
    /**
     * volatile(线程可见+禁止指令重排) + 双重检查锁
     */
    private static volatile Singleton singleton = null;
    private Singleton(){}
    public static Singleton getInstance(){
        if(singleton == null){
            synchronized (Singleton.class){
                if(singleton == null){
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

推荐写法2:

public class Singleton{
    /**
     * 静态内部类(静态内部类只加载一次,
     */
    private static class Holder {
        private static Singleton singleton = new Singleton();
    }
    private Singleton(){}
    public static Singleton getInstance(){
        return Holder.singleton;
    }
}

写法3:枚举式

public enum SingletonEnum {
    INSTANCE;
    private String name;
    public String getName(){
        return name;
    }
    public void setName(){
        this.name = name;
    }
}

参考链接:http://www.importnew.com/18872.html#comment-767337

上一篇下一篇

猜你喜欢

热点阅读