关于singleton的问题,它只在一个会话中有效????

03-08-30 testu
我写了一个SINGLETON的类,然后在JSP里使用它,我发现

它并没有真正的是一个单例,比如在1.jsp中使用它,当我

不停的刷新本页时,它却是只被创建了一次,也就是在第一次

访问1.jsp时候被创建了,以后不论怎么刷新1.jsp,都不会再创建,

但是当我打开一个新窗口时,再访问1.jsp,发现它又被创建了一次。

后来,我写了一个SERVLET,在它里面创建这个SINGLETON类的实例,

然后把这个SERVLET在web.xml里设置为onload 1,这时,不论我开

多少个IE,去访问1.jsp,这个类都不会被再次创建

请问,为什么会出现这种情况?????

testu
2003-08-30 15:38
我再说清楚一点,我不是说在JSP创建STINGLETON,

我的意思是,我写了一个SINGGLETON的类,在JSP里调用,如:

public class Myone
{
	private static final Myone m_instance = new Myone();

	private int counters = 0;

    private Myone() { counters=0; }

    public static Myone getInstance() {
        return m_instance;
    }
    ........
}

在其他的JAVABEAN中,使用Myone,比如:
public class other
{
.......
    public void init()
    {
        Myone one=Myone.getInstance();
        .....
     }
}

然后在1.jsp中,如果我写:
<%
other obj=new other();
obj.init();
......
%>
<p>

那么,当我访问1.jsp的时候,就会建立这个单例类Myone,

而且不论我刷新1.jsp多少次,Myone只有一个。

但是如果我新开一个IE,重新访问1.jsp,这时就会创建一个

新的Myone,而不是刚才那个已经创建好的。

我的问题是:

既然是单例类,为什么还会被创建多次那?

KillerMan
2003-08-31 11:50
public static Myone getInstance() { return m_instance; }

改成

if(m_instance == null){

return new Myone();

}else{

return m_instance

}

再,不要在声明m_instance属性的时候对其初始化

testu
2003-09-01 09:17
你错了,不用象你写的那样改,

而且应该在声明m_instance属性的时候对其初始化!!!

否则对getInstance函数还要加上同步原语

猜你喜欢