HttpServlet如何在不实现Runnable或扩展线程的情况下创建线程

时间:2011-07-09 04:28:08

标签: java java-ee

众所周知,当servlet接收请求时,它会创建一个新线程,并在新线程内部调用服务方法。因此,只有一个Servlet实例,可以调用许多线程。

我不明白的是HttpServlet如何在不实现runnable或扩展线程的情况下创建自己实例的线程?

任何人都可以澄清一下。

2 个答案:

答案 0 :(得分:5)

  

众所周知,当servlet接收请求时,它会创建一个新线程,并在新线程内部调用服务方法。因此,只有一个Servlet实例,可以调用许多线程。

事实上,这是不正确的。 Web容器通常维护一个有界的工作线程池来处理请求。不会为每个新请求创建新线程。

  

我不明白HttpServlet如何在不实现runnable或扩展线程的情况下创建自己实例的线程?

基本上,它没有。 HttpServlet不创建线程,它不是线程或可运行的。

Web容器具有实现特定的类,这些类实现Runnable或扩展Thread。这些类调用(共享)Servlet实例上的相关方法。

答案 1 :(得分:0)

这由Servlet容器(也称为Web容器)处理。 Servlet容器负责维护Servlet生命周期。

http://en.wikipedia.org/wiki/Java_Servlet

  

servlet的生命周期

     
      
  1. 容器调用no-arg构造函数。
  2.   
  3. Web容器调用init()方法。这个方法初始化了   servlet,必须在生命之前调用   一个servlet,init()方法是   只召唤一次。
  4.   
  5. 初始化后,servlet可以为客户端请求提供服务。每   请求是自己提供的   单独的线程。 Web容器   调用的service()方法   每个请求的servlet。该   service()方法确定种类   要求发出和发送   它是一个适当的方法来处理   请求。开发者   servlet必须提供实现   对于这些方法。如果请求一个   没有实现的方法   servlet是制作的,方法的   通常会调用父类   导致返回错误   请求者。
  6.   
  7. 最后,Web容器调用带有的destroy()方法   servlet停止服务。毁灭()   方法,如init(),仅被调用   一次进入servlet的生命周期。
  8.