Android设计模式之—单例模式

单利模式特别常用的模式之一,好处是保证一个类中只有一个实例,减少资源消耗.

单利模式分为懒汉式和饿汉式.

先来看懒汉式,所谓懒汉式,就是延迟加载,需要时才创建对象,先来看代码

class Singleton {
    //私有静态实例
    private static Singleton instance = null;
    //私有构造方法,防止被实例化
    private Singleton(){}

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

这段代码在项目中很常见,当然,在单线程中使用时没有问题的,但遇到了多线程就会存在隐患,会出现线程不安全,这时就需要加同步锁了

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;
    }
}

那么问题来了,为什么需要两次判空呢?

因为可能会有多个线程一起进入同步块外的 if,如果在同步块内不进行二次检验的话就会生成多个实例了。

下面来看饿汉式,饿汉式就是一上来就直接创建对象,并且实例被static和final,所以创建线程实例本身就是安全的,下面上代码

class Singleton {
    //类加载时直接初始化
    private static Singleton instance = new Singleton();
    //私有构造方法
    private Singleton(){}

    public static Singleton getInstance(){
        return instance;
    }
}
    原文作者:lvkaixuan
    原文地址: https://blog.csdn.net/lvkaixuan/article/details/78722314
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞