美文网首页
单例的一些实现方式

单例的一些实现方式

作者: pphdsny | 来源:发表于2018-03-01 19:25 被阅读144次
    • 懒汉式 - 用到才去创建实例,得注意多线程同时创建

      双重校验

      public class SingletonClass{
        private static volatile final SingletonClass sInstance;
        private SingletonClass(){}
        
        public static SingletonClass getInstance(){
          if(sInstance == null){
            synchronized(SingletonClass.class){
            if(sInstance == null){
                  sInstance = new SingletonClass();
                }
            }
          }
          return sInstance;
        }
      }
      
    • 饿汉式 - 事先创建好对象

      因为单例的实例被声明成 static 和 final 变量了,在第一次加载类到内存中时就会初始化,所以创建实例本身是线程安全的。

    • 私有静态内部类实现(推荐)

      内部类分为对象级别和类级别,类级内部类指的是,有static修饰的成员变量的内部类。如果没有static修饰的成员变量的内部类被称为对象级内部类。

      类级内部类相当于其外部类的static成员,它的对象与外部类对象间不存在依赖关系,相互独立,因此可直接创建。而对象级内部类的实例,是必须绑定在外部对象实例上的。类级内部类只有在第一次被使用的时候才被会装载。

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

    相关文章

      网友评论

          本文标题:单例的一些实现方式

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