繁体   English   中英

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

[英]How HttpServlet can create threads without implementing Runnable or extending thread

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

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

任何人都可以澄清一下。

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

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

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

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

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

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

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

servlet 的生命周期

  1. 容器调用无参数构造函数。
  2. Web 容器调用 init() 方法。 此方法初始化 servlet,并且必须在 servlet 生命周期之前调用,init() 方法仅调用一次。
  3. 初始化后,servlet 可以为客户端请求提供服务。 每个请求都在其自己的单独线程中提供服务。 Web 容器为每个请求调用 servlet 的 service() 方法。 service() 方法确定发出的请求类型并将其分派给适当的方法来处理请求。 servlet 的开发者必须提供这些方法的实现。 如果对未由 servlet 实现的方法发出请求,则会调用父 class 的方法,通常会导致向请求者返回错误。
  4. 最后,Web 容器调用使 servlet 停止服务的 destroy() 方法。 与 init() 一样,destroy() 方法在 servlet 的生命周期中只调用一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM