单例模式

 #region 数据库层单例模式

        private static IDB _EFDB = null;
        // Creates an syn object.
        private static readonly object SynObject = new object();

        public static IDB InstanceEFDB
        {
            get
            {
                // Double-Checked Locking
                if (null == _EFDB)
                {
                    lock (SynObject)
                    {
                        if (null == _EFDB)
                        {
                            _EFDB = new EFDB();
                        }
                    }
                }
                return _EFDB;
            }
        }

        #endregion //数据库层单例模式

为什么lock()后面还要判断一次  null == _EFDB,由于lock加锁,两个线程则一个进入,另一个在排队等待,必须要其中一个进入并出来后,另一个才能进入,因此如果没有第二次 null == _EFDB 为空的判断,则第一个线程创建了实例,第二个还是可以继续再创建新的实例

posted @ 2020-05-21 13:24  wonderfulviews  阅读(110)  评论(0编辑  收藏  举报