面试题精选-使用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;
    }
}
posted @ 2024-11-26 13:37  相遇就是有缘  阅读(30)  评论(0)    收藏  举报