【发布时间】:2020-02-26 02:50:10
【问题描述】:
我想在我的程序中为 session 提供一个 可重置 对象实例,它是线程安全的,会话示例可能是登录的用户会话。
我目前正在做这样的事情;
public final class ObjectFactory {
private static volatile NativeObjectWrapper instance = null;
private Singleton() {}
public static NativeObjectWrapper getInstance() {
if (instance == null) {
synchronized(ObjectFactory.class) {
if (instance == null) {
instance = new NativeObjectWrapper(AuthData);
}
}
}
return instance;
}
public void reset() {
synchronized(ObjectFactory.class) {
instance = null;
}
}
}
我想要延迟创建对象,能够重置它。上述方法是线程安全的吗?如果没有,是否有解决此问题的通用模式?
再举一个例子,这里的作用域对象有一些基于用户会话的内部数据,因此应该是每个用户会话的一个新实例。
【问题讨论】:
-
虽然不一样,但它们是单例的示例,而不是能够重置状态的示例。
-
我明白了。没有注意到你有一个
reset方法。如果这是您需要的,您可能想在问题中强调它。一般来说,单身人士是永远的。 -
你想要一个单例还是会话范围的对象?这个重置业务让我觉得你的设计有问题。单例包含什么?
标签: java multithreading architecture synchronization