面试题精选-使用lock锁时加双if的作用是什么
第一个IF:保证对象初始化之后,不去等待锁, 减少线程对同步锁的竞争,提高代码的执行效率。
第二个IF:保证对象只被实例化一次。
public class LazyMan
{
private static LazyMan _lazyMan;
private static object o = new object();
private LazyMan()
{
}
public static LazyMan GetInstance()
{
if (_lazyMan == null) //保证对象初始化之后,不在去等待锁
{
lock(o) //保证只有一个线程进去
{
if (_lazyMan == null) //保证只被实例化一次
{
_lazyMan = new LazyMan();
Console.WriteLine($"This is created by {Thread.CurrentThread.ManagedThreadId}");
}
}
}
return _lazyMan;
}
}
人生如逆旅
我亦是行人

浙公网安备 33010602011771号