美文网首页
android开发之单例模式

android开发之单例模式

作者: 无敌之神将 | 来源:发表于2020-03-06 13:48 被阅读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 就是一个 饿汉式一样。常用的单例一般就是这些了,说的不对的地方,请大家给我留言。

    相关文章

      网友评论

          本文标题:android开发之单例模式

          本文链接:https://www.haomeiwen.com/subject/qcavrhtx.html