如果servlet不是线程安全的,那么这是否意味着在servlet生命周期中创建和引用的所有对象都不是线程安全的?也许我没有完全理解这一点,但是在Web应用程序中,您几乎总是希望考虑在servlet生命周期期间存储的与单个用户的请求相关的数据。管理这些数据的一些最佳实践是什么?我是否应该为我的servlet实例化一个处理器(非常类似于前端控制器),并将其包装在一个同步块中?这似乎是一个主要的性能问题。
发布于 2010-02-28 07:28:22
只是不要将请求或会话作用域的数据指定为servlet的实例变量。就这样。在方法块中声明并分配它们,它将是threadsafe (读取:它将不再在所有请求/线程之间共享)。我之前已经详细回答过这个问题:In Java, How do I make sure my web application is thread safe?。
发布于 2010-02-28 07:32:18
实例变量不是线程安全的。局部变量(在方法中声明)将是线程安全的;每个线程基本上都有自己的一组局部变量。
如果必须依赖实例变量,请参阅writing thread-safe servlets上的这篇JavaWorld文章以获得其他提示。
https://stackoverflow.com/questions/2349315
复制相似问题