默认情况下servlet是可以并发处理请求的。如果多个请求同时访问某个servlet,这
时服务器会启动多个线程分别处理这些请求,并调用同一个servlet实例中的service
方法,这就要求servlet实现时需要考虑线程安全问题。
由于servlet实例的唯一性,如果在servlet中使用了静态变量(存在方法区中)或成员变量(存在堆中),那么它们
就可能会成为临界资源,多线程下就会有并发问题。
一种较好的解决方法是:servlet中避免使用静态变量和成员变量,只允许使用方法
内局部变量。
一种不好的解决方法是:让servlet实现SingleThreadModel 接口,这样做web容器
会让servlet中的方法仅能被单线程串行访问,并发性大大降低。不论这种方法的优
劣,具体代码是:
public class MyServlet extends HttpServlet implements SingleThreadModel {
...
}