美文网首页
笔试经常写的单例模式总结

笔试经常写的单例模式总结

作者: Random_Faith | 来源:发表于2017-12-01 15:18 被阅读0次

    主要有三个版本,第三个版本是最优答案。
    volatile关键字不但可以防止指令重排,也可以保证线程访问的变量值是主内存中的最新值。

    第一版 线程不安全

    public class Singleton {
        private Singleton() {}  //私有构造函数
        private static Singleton instance = null;  //单例对象
        //静态工厂方法
        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;
        }
    }
    

    第三版 最优解

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

    相关文章

      网友评论

          本文标题:笔试经常写的单例模式总结

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