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