首页 新闻 搜索 专区 学院

设计模式,单态问题,急。求助!

0
悬赏园豆:5 [已解决问题] 解决于 2015-04-09 17:04

现有一个普通单态类如下:

 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])

 

我对多线程不是很了解,望各位帮助。

Kevin.Choi的主页 Kevin.Choi | 初学一级 | 园豆:3
提问于:2015-04-09 16:25
< >
分享
最佳答案
0

首先你原来的代码写错了,private object _objLock=new object(); 应该为 private static object _objLock=new object();

其次,我猜测你是想实现管理多个对象的单例,那么这样实现会更简单。

private static ConcurrencyDictionary<TestEnum,TestClass> _InstanceList;

最后,如果你使用一款 IoC 容器(比如 Micorsoft Unity)的话,通过配置就能实现集中管理多个对象的单例,专门对付你这种对多线程不是很了解的人。

收获园豆:5
Launcher | 高人七级 |园豆:45045 | 2015-04-09 16:34
其他回答(2)
0

直接所就行了。不用改。不差这点阻塞

吴瑞祥 | 园豆:28979 (高人七级) | 2015-04-09 16:30

谢谢你.

支持(0) 反对(0) Kevin.Choi | 园豆:3 (初学一级) | 2015-04-09 17:04
0

锁不用动

茂茂 | 园豆:2860 (老鸟四级) | 2015-04-09 17:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册