美文网首页
究极 单例模式

究极 单例模式

作者: 画十 | 来源:发表于2017-12-05 12:26 被阅读8次

    原文:@程序员小灰

    单例模式第一版

    public class Singleton {
        private Singleton() {}  //私有构造函数
        private static Singleton instance;  //单例对象
        //静态工厂方法
        public static Singleton getInstance() {
            if (instance == null) {
                instance = new Singleton();
            }
            return instance;
        }
    }
    

    单例模式第二版

    在第一版的基础上加上双重加锁检测,防止并发时候创建多个对象

    public class Singleton {
       private Singleton() {}  //私有构造函数
       private static Singleton instance = null;  //单例对象
       //静态工厂方法
       public static Singleton getInstance() {
            if (instance == null) {      //双重检测机制
             synchronized (Singleton.class){  //同步锁
               if (instance == null) {     //双重检测机制
                 instance = new Singleton();
                   }
                }
             }
            return instance;
        }
    }
    

    单例模式第三版

    volatile :防止指令重排

    public class Singleton {
        private Singleton() {}  //私有构造函数
        private volatile static Singleton instance = null;  //单例对象
        //静态工厂方法
        public static Singleton getInstance() {
              if (instance == null) {      //双重检测机制
             synchronized (Singleton.class){  //同步锁
               if (instance == null) {     //双重检测机制
                 instance = new Singleton();
                    }
                 }
              }
              return instance;
          }
    }
    

    单例模式第四版(推荐使用)

    利用ClassLoader的加载机制来实现懒加载,并保证构建的单例线程安全。

    public class Singleton {
        private static class LazyHolder {
            private static final Singleton INSTANCE = new Singleton();
        }
        private Singleton (){}
        public static Singleton getInstance() {
            return LazyHolder.INSTANCE;
        }
    }
    

    其他

    相关文章

      网友评论

          本文标题:究极 单例模式

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