美文网首页
单例模式获取单例的时候判断单例是否为空两次的问题

单例模式获取单例的时候判断单例是否为空两次的问题

作者: IOwl | 来源:发表于2017-06-02 15:23 被阅读0次

当我们使用单例模式,获取单例的时候经常见到下面这种写法:

public class Factory {

    private volatile static Factory sInstance = null;

    public static Factory getInstance() {
        if (sInstance == null) {
            synchronized (Factory.class) {
                if (sInstance == null) {
                    sInstance = new Factory();
                }
            }
        }
        return sInstance;
    }
}

为什么会这么写呢,原因是为了避免多线程并发的时候创建多余的实例。
第一次判断 sInstance是否为空是为了确保返回的实例不为空
第二次判断 sInstance是否为空是为了防止创建多余的实例
eg:
 有两个线程获取这个单例的时候第一线程进来,先判断sInstance是否为空,为空加锁,判断sInstance,为空创建实例。当一个线程还在创建实例的时候第二个线程获取单例判断sInstance,为空等待,判断为不为空,不创建,返回上一个创建的实例。如果没有第二次判断的话第一个线程创建完释放锁的时候第二个线程获取锁并会再次创建实例。

相关文章

  • 单例模式获取单例的时候判断单例是否为空两次的问题

    当我们使用单例模式,获取单例的时候经常见到下面这种写法: 为什么会这么写呢,原因是为了避免多线程并发的时候创建多余...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • 常见的设计模式

    创建型模式 结构型模式 行为模式 单例模式 单例模式的优点 常见的五种单例模式实现方式 单例带来的问题 如何选择 ...

  • IOS单例模式的底层原理

    单例介绍 本文源码下载地址 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一...

  • 设计模式 ~ 单例模式

    七种常见的单例模式 1、懒汉式 特点:获取单例时判空即可,线程不安全 2、线程安全的懒汉式 特点:在获取单例的方法...

  • OC - 单例模式

    导读: 一、什么是单例模式 二、单例的作用 三、常见的单例类 四、自定义单例类的方法 一、什么是单例模式 单例模式...

  • IOS学习笔记之单例

    单例介绍 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一种常用的软件设计模...

  • python面试题-2018.1.30

    问题:如何实现单例模式? 通过new方法来实现单例模式。 变体: 通过装饰器来实现单例模式 通过元类来创建单例模式...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

网友评论

      本文标题:单例模式获取单例的时候判断单例是否为空两次的问题

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