web---如何实现servlet的单线程模式?

默认情况下servlet是可以并发处理请求的。如果多个请求同时访问某个servlet,这
时服务器会启动多个线程分别处理这些请求,并调用同一个servlet实例中的service
方法,这就要求servlet实现时需要考虑线程安全问题。

由于servlet实例的唯一性,如果在servlet中使用了静态变量(存在方法区中)或成员变量(存在堆中),那么它们
就可能会成为临界资源,多线程下就会有并发问题。

一种较好的解决方法是:servlet中避免使用静态变量和成员变量,只允许使用方法
内局部变量。

一种不好的解决方法是:让servlet实现SingleThreadModel 接口,这样做web容器
会让servlet中的方法仅能被单线程串行访问,并发性大大降低。不论这种方法的优
劣,具体代码是:

public class MyServlet extends HttpServlet implements SingleThreadModel {
...
}

猜你喜欢

转载自blog.csdn.net/qq_42689450/article/details/83098013