我有一个Web应用程序,它有Servlet和通过getInstance访问的静态类:
MyServlet extends HttpServet {
protected void doGet(...) {
MyClass.getInstance().doStuff();
}
}
当客户端连接到servlet时,他们是否获得了自己的MyClass,或者这个类的实例对所有servlet都是全局的?我的意思是说它有一个在doGet方法中设置的静态变量,当其他clietns访问Web应用程序时,它们是否会获得此静态类中其他客户端设置的变量的值?
编辑:
具体来说,MyClass
表示访问Web服务的类,即经过身份验证的类。
答案 0 :(得分:2)
是的,在类加载器中共享static
字段值。因此,如果MyClass.getInstance()
返回static
MyClass
字段,则所有调用都会共享该字段。
请注意,只有一个servlet实例,多个线程通过其doGet(..)
方法。
如果您需要进行一些初始化,您有两个选择:.getInstance()
或servlet的init()
方法。
答案 1 :(得分:2)
您的Web应用程序中的所有代码都可以访问MyClass
的相同静态变量。
但是,它仍然受Java线程模型规则的约束。
因此,在没有同步的情况下,在doGet
中更改它并不意味着其他线程会自动看到新值。
答案 2 :(得分:1)
取决于MyClass的实现。如果它是一个单例,那么它只是doStuff所需的所有“实例化”的一个实例。
分享其代码,人们会帮助您。