早上好。
我目前正在开发一个 Java Web 服务项目,该项目部署在 Apache Tomcat 7 服务器上。为了项目的需要,我需要在内存中维护一个全局(在 WS 线程中,由每个请求创建)对象。因此,我尝试按如下方式实现单例设计模式:
public class SingletonDesign {
private static boolean _instanceFlag = false;
private static final SingletonDesign _instance = new SingletonDesign();
private static GlobalObject _myGlobalObject;
private SingletonDesign() {
if(_instanceFlag == false) {
_myGlobalObject = new GlobalObject();
_instanceFlag = true;
}
}
public static GlobalObject getModel() {
if(_instanceFlag == false) {
_myGlobalObject = new GlobalObject();
_instanceFlag = true;
}
return _myGlobalObject;
}
public static int parseModel() {
if(_instanceFlag == false) {
_myGlobalObject = new ItemSimilarityModel();
_instanceFlag = true;
}
int val = _myGlobalObject.parseFromFile();
return val;
}
}
我知道每次完成请求时,都会在我的 Web 上创建一个新线程——服务类(对象)。我的目标是在所有线程中拥有一个全局 SingletonDesign 对象,该对象在内存中保持活动状态,并且只创建一次。尽管上述设计似乎符合我的预期,但我不确定它是否正确。所以这些是我的问题:
1)为什么SingletonDesign对象的方法需要是静态的?(我试图将它们定义为非静态的,但我的 Singleton 对象未正确初始化)。
2)以上设计见于单例设计模式的维基百科页面。让我困惑的部分是 _instance 字段的初始化,我在其他 Singleton 实现中也看到过。为什么我们需要那个对象?
3)我的对象在服务器停止之前是否保持活动状态?我做了一些测试,似乎它还活着,但我必须 100% 确定。
感谢您的时间与兴趣。