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

参考答案

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

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

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

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

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

results matching ""

    No results matching ""