众所周知,Servlets为各自的请求使用单独的线程,这提高了服务器的效率。然而,在struts2框架中,每个映射的操作-类都为各自的请求创建了自己的对象。
现在,与普通servlet中的线程相比,在struts2中拥有单独的对象是一个很好的实践(优化)吗?为什么我们不直接吃servlets呢?
发布于 2012-11-02 22:28:28
当请求传入web容器时,容器从池中获取线程以执行请求。一旦处理了请求,线程就会返回到池中,以便用于后续请求。可以并行处理多个请求,因为池有多个可用的线程。
web应用程序中声明的每个servlet仅由web容器实例化一次。因此,多个并发线程使用每个servlet的单个实例。这就是为什么您的servlet必须是线程安全的。
Struts不会改变上面的任何内容。它所做的就是定义一个处理所有请求的servlet或过滤器。对于针对给定操作路径的每个请求,将创建一个新的Struts实例。这就是servlet模型的不同之处。servlet是一个单例(所有请求只有一个实例),而每个请求都实例化了一个新Struts操作。
其优点是操作不需要线程安全,因为它只被一个线程使用,然后被丢弃。它可以包含中间状态而不需要任何同步。缺点是创建了许多实例。但是,由于Java垃圾收集器在回收短期对象(如Struts操作)方面非常快速,因此在实践中不会造成任何问题。
https://stackoverflow.com/questions/13203731
复制相似问题