双检查 单例模式

双检查的单例模式

应用场景

多线程创建单例,避免并发重复创建对象。

代码引入

public class DoubleCheckSingleton {

    private  volatile static DoubleCheckSingleton _obj; // 标识1

    private DoubleCheckSingleton(){}

    public  DoubleCheckSingleton getInstance()
    {
        if(_obj==null) //标识2
        {
            synchronized (DoubleCheckSingleton.class)//标识四
            {
                if(_obj==null ) //标识3
                {
                    _obj = new DoubleCheckSingleton();
                }
            }
        }
        return _obj;
    }
}

解释

标识1:使用了volatile定义对象,主要是为了多线程可见。
标识2:第一次检查
标识3:锁住当前类对象,避免多线程并发干扰。
标识4:第二次检查。(锁的过程需要时间,有可能在锁的时候同时创建了)。

发布了21 篇原创文章 · 获赞 47 · 访问量 3929

猜你喜欢

转载自blog.csdn.net/richyliu44/article/details/104396090
今日推荐