servlet线程不安全问题
造成的根本原因是:Servlet是单例的,Servlet中的非static的成员变量只有一份,多个客户端好比是多个线程,都访问的是同一个空间.
解决方案:
-
让当前Servlet实现javax.servlet.SingleThreadModel接口.
包装只有一个线程放Servlet,如果有多个线程就排队,如此的话,性能超低(已过时).
-
在Servlet中不要使用成员变量,使用局部变量.
每一个用户,每一个请求都会调用service方法,而局部变量在service方法中,每一次都是新的空间.
Struts1,Spring MVC都是线程不安全的,都是单例的和Servlet类似.
Struts2是线程安全的,因为每一个线程(请求)都是一个新的Action对象.

本文深入探讨了Servlet的线程安全问题,分析了其单例模式下非static成员变量导致的并发访问冲突,并提供了实现SingleThreadModel接口、使用局部变量等解决方案。同时,对比了Struts1、SpringMVC与Struts2的线程安全特性。
163

被折叠的 条评论
为什么被折叠?



