if (_instance == null) //第一重判断,先判断实例是否存在,不存在再加锁处理
{
lock (syncRoot) //加锁,在某一时刻只允许一个线程访问
{
if (_instance == null) //第二重判断: 第一个线程进入Lock中执行创建代码,第二个线程处于if和lock之间挂起的排队等待状态,当第二个线程进入Lock后并不知晓实例已创建,将会继续创建新的实例
{
_instance = new SingletonClass();
}
}
}
单例模式为什么用两个if
于 2021-02-08 11:12:28 首次发布