首页 > 其他 > 详细

双重锁定检查(DCL,Double Check Lock)---单例模式

时间:2020-06-09 10:16:56      阅读:67      评论:0      收藏:0      [点我收藏+]
public class Singleton {
    // volatile防止指令重排序
    private volatile static Singleton instance = null;

    public static Singleton getInstance() {
        // 多线程竞争情况下,其他线程检测到instance不为空
        if (null == instance) {
            synchronized (Singleton.class) {
                // 多线程竞争情况下,如果其他线程第一次检测到instance为空,加锁创建完对象后再判断一次。
                if (null == instance) {
                    // 线程一被指令重排,先执行了赋值,但还没执行完构造函数(即未完成初始化)
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

 

双重锁定检查(DCL,Double Check Lock)---单例模式

原文:https://www.cnblogs.com/nginxTest/p/13070595.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!