美文网首页
单例模式(懒汉式)

单例模式(懒汉式)

作者: bin丶 | 来源:发表于2020-11-28 19:39 被阅读0次


    以下方式均不推荐开发使用,仅供学习

    I. 线程不安全的懒汉式

    package singleton;
    
    /**
     * 懒汉式(懒汉式-线程不安全)
     */
    public class Singleton_3 {
    
        private static Singleton_3 instance;
    
        private Singleton_3(){}
    
        // 对外提供一个静态方法。 仅有在被使用时才创建
        public static Singleton_3 getInstance() {
            if (instance == null) {
                instance = new Singleton_3();
            }
    
            return instance;
        }
    }
    

    优点

    • 不会造成内存浪费,因为只有在被使用时才开始创建实例

    缺点

    • 为何线程不安全?
    • 答: 因为在多线程的情况下,一个线程进入了if(instance == null)判断语句块,还未来得及执行,另一个线程也来到了这个判断语句,这时会产生多个实例,所以多线程模式下不可使用这种方式。

    II. 线程安全的懒汉式

    package singleton;
    
    /**
     * 懒汉式(懒汉式-线程安全)
     */
    public class Singleton_4 {
    
        private static Singleton_4 instance;
    
        private Singleton_4(){}
    
        // 对外提供一个静态方法。 仅有在被使用时才创建
        // 加入 synchronized 关键字, 解决线程安全问题
        public static synchronized Singleton_4 getInstance() {
            if (instance == null) {
                instance = new Singleton_4();
            }
    
            return instance;
        }
    }
    

    优点

    • 相较于 I 实现了线程安全

    缺点

    • 效率低下,每个线程在想获得类的实例的时候,执行getInstance()都要去同步一下。

    相关文章

      网友评论

          本文标题:单例模式(懒汉式)

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