Sat*_*dra 3 java multithreading servlets struts2 java-ee
众所周知,Servlet为各自的请求使用单独的线程,这提高了服务器的效率.然而,在struts2框架中,每个映射的Action-Class都为相应的请求创建了自己的对象.
现在,与普通servlet中的线程相比,如何在struts2中实现(优化)单个对象?为什么我们不只是有servlet!
当请求进入Web容器时,容器从池中获取一个线程以执行请求.处理完请求后,线程将返回池以便可用于后续请求.可以并行处理多个请求,因为池有多个可用线程.
您在Web应用程序中声明的每个servlet仅由Web容器实例化一次.因此,每个servlet的单个实例由几个并发线程使用.这就是您的servlet必须是线程安全的原因.
Struts不会改变上面的任何内容.它的作用是定义一个处理所有请求的servlet或过滤器.对于针对给定操作路径的每个请求,都会创建一个新的Struts Action实例.这是servlet模型的不同之处.servlet是一个单例(所有请求只有一个实例),而每个请求都会实例化一个新的Struts操作.
优点是该操作不需要是线程安全的,因为它只被一个线程使用然后被丢弃.它可以包含中间状态而无需同步.缺点是创建了许多实例.但是由于Java垃圾收集器在回收像Struts操作这样的短期对象方面非常快,所以它在实践中不会引起任何问题.