如果我有一些线程正在运行并在一个线程中我访问一个单例(可能是在另一个线程中创建),我得到一个新的“单例”,就每个访问的线程调用单例的构造函数它在他的记忆空间第一次?我明白了吗?
问题在于我的应用程序我有一个由主线程创建的单例。如果我然后调用Singleton.Instance.somemethod(...)我总是得到空指针异常或空列表,即使列表是在主线程中创建并填充的?
有没有办法处理这个问题,这样我就可以在所有运行的线程中使用单例的相同的实例?某种方式同步整个实例?
谢谢。
编辑:抱歉缺少一些非常重要的信息。我在Visual Studio 2010 Professional下使用C#和.NET Framework 4.0。我用这种方式创建了Singleton:
static readonly object _padlock = new object();
public static StaticAnalyzer Instance
{
get
{
lock (_padlock)
{
if (_instance == null)
{
_instance = new StaticAnalyzer();
}
return _instance;
}
}
}
在后台,每个线程都有自己的虚拟内存空间吗?因此,如果我在主线程中创建单例,然后使用task.factory创建一些工作线程,并且工作线程调用实例,为什么它们会获得真正的单例?因为static关键字?
答案 0 :(得分:1)
不,单个(如果实现正确)将只是所有线程的一个。像System.DBNull
一样。否则它不是单身人士。您的代码必须在某处出错。