两种单例模式对比

第一种

public class Singleton {
    //饿汉式
    private static final Singleton minstance=new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
        return minstance;
    }
}

我们依赖JVM 在加载这个类时马上创建此唯一的单个实例,JVM 保证在任何线程访问minstance静态变量之前,一定先创建此实例。

第二种:

public class Singleton {
    //静态内部类单例模式   
    private Singleton(){}
    public static Singleton getInstance(){
        return SingletonHolder.mInstance;
    }
    /**
     * 静态内部类
     */
    private static class SingletonHolder{
        private static final Singleton mInstance=new Singleton();
    }
}

当第一次加载 Singleton 类是并不会初始化 mInstance,只有在第一次调用 Singleton 的 getInstance 方法时才会导致 mInstance 被初始化,因此,第一次调用 getInstance 方法会导致虚拟机加载 SingletonHolder 类,这种方式 不仅能够保证线程安全,也能够保证单例对象的唯一性,同时也延迟了单例的实例化,所以这是推荐使用的单例模式实现方式。

个人感觉来说,追求代码简洁的话,第一种感觉比较好一点

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容