我需要知道为什么 servlet 不是线程安全的? Struts 2.0 框架控制器 servlet 是线程安全的原因是什么?
我需要知道为什么 servlet 不是线程安全的?
由于 Java 编程语言的多线程特性,Servlet 实例本质上不是线程安全的。 Java虚拟机支持通过多个线程执行相同的代码。这对于具有多个处理器的机器来说是一个巨大的性能优势。这也允许多个并发用户执行相同的代码,而不会互相阻塞。
想象一个有 4 个处理器的服务器,其中普通 servlet 每秒可以处理 1000 个请求。如果该 servlet 是线程安全的,那么 Web 应用程序的行为就好像它在具有 1 个处理器的服务器上运行一样,其中该 servlet 每秒只能处理 250 个请求(好吧,事实并非如此)exactly就像那样,但你明白了)。
如果您在使用servlet时遇到线程安全问题,那么就是your错误,而不是 Java 或 Servlet 的错误。您需要修复 servlet 代码,以便请求或会话范围的数据never分配为 servlet 的实例变量。有关深入的解释,另请参阅Servlet 如何工作?实例化、会话、共享变量和多线程 https://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading/3106909#3106909.
Struts 2.0 框架控制器 servlet 是线程安全的原因是什么?
它不是线程安全的。您将 Struts 调度程序 servlet 过滤器与 Struts 操作混淆了。 struts 操作会根据每个请求重新创建。因此,每个请求都有其自己的请求范围 Struts 操作实例。 Struts 调度程序 servlet 过滤器不会将它们存储为自己的实例变量。相反,它将其存储为HttpServletRequest
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)