最近在研究设计模式,我会陆续总结一些实用的代码出来。

下面是一个C#多线程单件模式的代码模板。把T换成你自己的类型就可以使用了。其精妙之处就在于用lock语句锁定资源来避免多线程同时走入if语句去创建多个对象。

private static volatile T _instance = null;
private static object objLock = new Object();

private T()
{

}

public static T Instance
{
    get
    {
        if (_instance == null)
        {
            lock (objLock)
            {
                if (_instance == null)
                {
                    _instance = new T();
                }
            }
        }
        return _instance;
    }
}

在必要的时候需如果要刷新当前instance,可以这样写:

public static void RefreshInstance()
{
    _instance = new T();
}