推荐使用的两种单例模式

两种经典的线程安全的单例模式(均采用懒汉式),一种是同步加锁的模式;一种是采用私有静态类的方式。

一、只有当instance为null时,需要获取同步锁,创建一次实例。当实例被创建,则无需试图加锁。

public class Singleton {
    private static Singleton instance=null;
    private Singleton(){

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

二、定义一个私有的内部类,唯一的作用就是随着类的加载(而不是随着对象的产生)而产生,在第一次用这个嵌套类时,会创建一个实例。
而类型为SingletonHolder的类,只有在Singleton.getInstance()中调用,由于私有的属性,他人无法使用SingleHolder,不调用Singleton.getInstance()就不会创建实例。

public class Singleton {
    private Singleton(){

    }
    private static class SingletonHolder{
        private final static Singleton instance = new Singleton();
    }
    public static Singleton getInstance(){
        return SingletonHolder.instance;
    }
}

猜你喜欢

转载自blog.csdn.net/gchd19921992/article/details/72424706