现有一个普通单态类如下:
1 public class TestFactory 2 { 3 private static TestClass _Instance; 4 5 private object _objLock=new object(); 6 7 public TestClass GetInstance() 8 { 9 if (_Instance == null) 10 { 11 lock (_objLock) 12 { 13 if (_Instance == null) 14 { 15 _Instance = new TestClass(); 16 } 17 } 18 } 19 return _Instance; 20 } 21 }
我的问题是,现在我要对这个类做一些调整:
将
public TestClass GetInstance()
方法改为:
public TestClass GetInstance(TestEnum eEnum)
我的问题是,锁怎么办?
是否应该将锁
private object _objLock=new object();
改为
private Dictionary<TestEnum, Object> _objLocks = new Dictionary<TestEnum, object>()
{
{TestEnum.Key1, new object()},
{TestEnum.Key2, new object()}
};
而将lock (_objLock)
改为
lock (_objLocks[eEnum])
我对多线程不是很了解,望各位帮助。
首先你原来的代码写错了,private object _objLock=new object(); 应该为 private static object _objLock=new object();
其次,我猜测你是想实现管理多个对象的单例,那么这样实现会更简单。
private static ConcurrencyDictionary<TestEnum,TestClass> _InstanceList;
最后,如果你使用一款 IoC 容器(比如 Micorsoft Unity)的话,通过配置就能实现集中管理多个对象的单例,专门对付你这种对多线程不是很了解的人。
直接所就行了。不用改。不差这点阻塞
谢谢你.
锁不用动