7

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

  1. Servlets 是否为单例?据我说,它们仅由容器初始化,但它们仍然不是单例的??为什么 ??

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

我的想法是,每当有一个新请求时,容器都会为传入的请求创建一个新线程,比如 Req1,因为它将控制调用或分派给 servlet 的服务方法。现在这个执行发生在并发......我想是这样......

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

4

4 回答 4

5

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

于 2013-06-06T12:49:27.583 回答
3

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

最近这个接口 SingleThreadModel 被弃用了

于 2013-06-06T14:37:33.730 回答
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

于 2013-06-06T12:51:36.107 回答
1

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

于 2013-06-07T04:33:28.537 回答