这个问题之前已被提出并已经讨论过,但我想进一步询问。
Servlets是否是Singleton? 据我说,他们只是由容器初始化,但他们仍然不是单身?为什么??
Servlets是单线程还是多线程(忘记 javax.servlet.SingleThreadModel 类) 即当有多个单个servlet请求时会发生什么? 如果它们被并行执行,那意味着它是多线程的? 如果它是多线程的,那么每个线程都会有一个servlet的实例,这与第一点相矛盾!!
我的想法是, 每当有新的请求时,容器为传入的请求创建一个新的线程,例如Req1,因为它调用或调度控件到servlet的服务方法。现在这个执行发生了......我想是的......
我的工作在MVC环境中是否相同? (比如Struts 1/2,Springs)
答案 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