android开发之单例模式

2020-03-06  本文已影响0人  无敌之神将

单例模式大家平时开发都要用到,面试也经常会考到,下面咱们就说一下常用的单例模式。

1 饿汉式

懒汉式就是开始在加载类的时候就创建实例。

// 懒汉式 类加载的时候就创建实例
class SingleInstance {
  private static SingleInstance instance = new SingleInstance();
  private SingleInstance() {}
  public static SingleInstance getInstance() {
      return instance;
  }
}

饿汉式优点是 线程安全 初始化就创建 缺点是初始化比较慢。

懒汉式

// 懒汉式 使用时候判断 线程不安全
class SingleInstance2 {
    private static SingleInstance2 instance;
    private SingleInstance2() {

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

这是最基本的懒汉式 意思就是人比较懒 用的时候采取创建。这种模式线程是不安全的,可以优化。

优化后懒汉式

class SingleInstance2 {
    private static SingleInstance2 instance;

    private SingleInstance2() {
    }

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

优化 1 synchronized 添加同步锁 , 2 双空判断 。
第二个( == null) 判断是在 null 的情况下创建 。第一个(==null) 是 避免不必要的 同步 耗费资源。

通过静态内部类 创建单例

// 静态内部类加载模式
class SingleInstance3 {
    private SingleInstance3() {
    }

    public static SingleInstance3 getInstance() {
        return SingleInstanceHolder.instance;
    }

    private static class SingleInstanceHolder {
        private static SingleInstance3 instance = new SingleInstance3();

    }
}

静态内部类 我理解就是 饿汉式 的 优化 。保证了线安全,又不是初始化创建,不影响初始化的速度。 这个其实内部类 SingleInstanceHolder 就是一个 饿汉式一样。常用的单例一般就是这些了,说的不对的地方,请大家给我留言。

上一篇下一篇

猜你喜欢

热点阅读