我有一个 Web 应用程序,其中包含 Servlet 和通过 getInstance 访问的静态类:
MyServlet extends HttpServet {
protected void doGet(...) {
MyClass.getInstance().doStuff();
}
}
当客户端连接到 servlet 时,它们是否获得自己的 MyClass 实例,或者此类的实例对于所有 servlet 都是全局的?我的意思是,假设它有一个在 doGet 方法期间设置的静态变量,当其他客户端访问 Web 应用程序时,他们会获取其他客户端在该静态类中设置的变量值吗?
编辑:
具体来说,MyClass
表示访问 Web 服务的类,这是经过身份验证的。
最佳答案
Web 应用程序中的所有代码都可以访问 MyClass
的同一静态变量。
但是,它仍然必须遵守 Java 线程模型规则。
因此,在没有同步的情况下,在 doGet
中更改它并不意味着其他线程会自动看到新值。
关于Java servlet 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9024579/