Servlet:Singleton,Singlethread或Multi Instance Multithread

时间:2013-06-06 12:42:54

标签: java jsp servlets

这个问题之前已被提出并已经讨论过,但我想进一步询问。

  1. Servlets是否是Singleton? 据我说,他们只是由容器初始化,但他们仍然不是单身?为什么??

  2. Servlets是单线程还是多线程(忘记 javax.servlet.SingleThreadModel 类) 即当有多个单个servlet请求时会发生什么? 如果它们被并行执行,那意味着它是多线程的? 如果它是多线程的,那么每个线程都会有一个servlet的实例,这与第一点相矛盾!!

  3. 我的想法是, 每当有新的请求时,容器为传入的请求创建一个新的线程,例如Req1,因为它调用或调度控件到servlet的服务方法。现在这个执行发生了......我想是的......

    我的工作在MVC环境中是否相同? (比如Struts 1/2,Springs)

4 个答案:

答案 0 :(得分:5)

仅存在一个实例的事实并不意味着它不是多线程的。更多线程可以同时调用相同实例的相同方法。 Servlet是绝对多线程的。

答案 1 :(得分:3)

Servlet是多线程的 - 这是它们效率的基础。  可以使用“implements SingleThreadModel”来使servlet成为单线程,因此对于每个请求都将创建一个新对象。

最近不推荐使用此接口SingleThreadModel

答案 2 :(得分:2)

这取决于实施。 servlet接口未指定。 http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html

但是,如果您看到HttpServlet,那么您可以看到它指定它应该同步。 http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServlet.html

答案 3 :(得分:1)

也许,下面链接中给出的图表说明了一切...... http://www.tutorialspoint.com/servlets/servlets-life-cycle.htm