• JAVA设计模式---单例模式的几种实现方式比较


    1、延迟实例化方式:(懒汉模式)

    public class Singleton {
      private static Singleton uniqueInstance;
      private Singleton(){
      }

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

    对资源敏感的对象特别重要,缺点是线程不安全。

    2、延迟实例化方式:(懒汉模式)

    public class Singleton {
      private static Singleton uniqueInstance;
        private Singleton(){
        }

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

    线程安全了,但是效率低,资源利用率不高,因为只有第一次执行此方法时,才需要同步,99%的场合用不到同步,而同步一个方法可能会造成程序执行效率下降100倍。

    3、非延迟实例化方法:(饿汉模式)

    public class Singleton3 {
      private static Singleton3 uniqueInstance = new Singleton3();
        private Singleton3(){
        }
        public static Singleton3 getInstance(){
          return uniqueInstance;
        }
    }

    4、双重检查加锁:
    public class Singleton4 {
      private volatile static Singleton4 uniqueInstance;
        private Singleton4(){
        }
        public static Singleton4 getInstance(){
          if(uniqueInstance == null){
            synchronized (Singleton4.class){
              if(uniqueInstance == null){
                uniqueInstance = new Singleton4();
              }
            }
          }
        return uniqueInstance;
      }
    }
    volatile关键字确保:当uniqueInstance变量被初始化成Singleton4实例时,多个线程能正确处理uniqueInstance变量。

    注意:

    1)如果不是采用第五版的Java 2,双重检查加锁实现会失效;
    2)如果使用多个类加载器,可能会导致单件失效而产生多个实例;
    3)如果使用JVM1.2或之前的版本,必须建立单件注册表,以免GC将单件回收。

  • 相关阅读:
    用户交互
    python简介
    maven阿里云镜像setting
    apache虚拟主机的ip用法 包括iis
    apache的虚拟主机配置和指定目录的访问描述(
    apache重定向301 配置,根域名转到www
    前端学习
    一步一步写jQuery插件
    json 和 table控件
    下载相关
  • 原文地址:https://www.cnblogs.com/hunterCecil/p/5505256.html
Copyright © 2020-2023  润新知