对不起,如果这已经在其他地方得到了回答……我发现了很多关于类似事情的帖子,但不一样。
我想确保一次只存在一个对象的一个实例,但我不希望该对象在其自然生命周期之后保留,因为它可能是单例模式。
我正在编写一些代码,其中每分钟都会触发列表处理(由我无法控制的外部代码)。目前,我每次只创建一个新的“处理”对象,当它超出范围时,它会按照正常情况被销毁。但是,有时处理时间可能超过一分钟,因此下一个触发器将在新线程中创建处理类的第二个实例。
现在,我想要一种机制,一次只能存在一个实例……比如说,某种工厂一次只允许一个对象。例如,对工厂的第二次调用将返回 null,而不是一个新对象。
到目前为止,我的(蹩脚的)解决方案是将工厂类型对象作为处理器类的嵌套类:
class XmlJobListProcessor
{
private static volatile bool instanceExists = false;
public static class SingletonFactory
{
private static object lockObj = new object();
public static XmlJobListProcessor CreateListProcessor()
{
if (!instanceExists)
{
lock (lockObj)
{
if (!instanceExists)
{
instanceExists = true;
return new XmlJobListProcessor();
}
return null;
}
}
return null;
}
}
private XmlJobListProcessor() { }
....
}
我正在考虑为 XmlJobListProcessor 类编写一个显式析构函数,将“instanceExists”字段重置为 false。
我意识到这是一个非常糟糕的设计。工厂本身应该是一个类...它只是嵌套的,因此它和实例析构函数都可以访问 volatile 布尔值...
有人有更好的方法来做到这一点吗?干杯