hqt*_*hqt 6 java servlets instance-variables thread-safety java-ee
当我阅读时Head First Servlet and JSP,他们说实例变量是非线程安全的.
我不太理解这句话.例如:我有一个名称为的servlet ActionServlet.java.每次将每个用户的请求发送到服务器,容器将创建一个新线程并创建新ActionServlet实例.
ActionServlet 可能有一个结构:
public class ActionServlet extends HttpServlet {
// example of instance variable
Instance variable;
public void processRequest(HttpServletRequest request, HttpServletResponse response) {
// process something relating to instance variable
}
}
Run Code Online (Sandbox Code Playgroud)
所以,因为所有这些线程都为它创建了一个新的类实例ActionServlet,所以我在这里看不到任何问题.因为这些线程的实例是彼此分开的.
请在多线程环境中找出使用实例变量时的问题.
谢谢 :)
Wil*_*ung 17
你犯的错误在这里:
因此,因为所有这些线程都为ActionServlet创建了一个新的类实例,所以我在这里看不到任何问题.因为这些线程的实例是彼此分开的.
容器不会为每个请求创建Servlet类的新实例.它重用了现有的一个.这就是为什么它们不是线程安全的.
Stripes Action Framework为每个请求创建一个新实例,因此在该框架下可以做出正确的假设.但是,例如,Struts 1遵循Servlet模型,并不会为每个请求创建新操作.
这并不意味着容器仅限于单个实例,理论上它可以创建多个实例,但它不是指定的行为,因此不能依赖它.大多数流行的没有.
| 归档时间: |
|
| 查看次数: |
18049 次 |
| 最近记录: |