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

发布于 2024-11-19 02:53:25 字数 161 浏览 1 评论 0原文

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

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

任何人都可以澄清一下吗?

As we know, when servlet receivies a request, it creates a new thread and inside the new thread, the service method is invoked. So with only one Servlet instance, many threads are invoked.

What I didn't understand is how HttpServlet is able to create threads of its own instance without implementing runnable or extending thread?

Can any one please clarify.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

胡渣熟男 2024-11-26 02:53:25

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

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

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

基本上,事实并非如此。 HttpServlet 不会创建线程,它不是线程或可运行对象。

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

As we know, when servlet receivies a request, it creates a new thread and inside the new thread, the service method is invoked. So with only one Servlet instance, many threads are invoked.

In fact, that is INCORRECT. The web container typically maintains a bounded pool of worker threads to handle requests. New threads don't get created for each new request.

What I didn't understand is how HttpServlet is able to create threads of its own instance without implementing runnable or extending thread?

Basically, it doesn't. HttpServlet does not create threads, and it is not a thread or a runnable.

The web container has implementation specific classes that implement Runnable or extends Thread. These classes call the relevant methods on the (shared) Servlet instance.

可遇━不可求 2024-11-26 02:53:25

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

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

Servlet 的生命周期

  1. 容器调用无参数构造函数。
  2. Web 容器调用 init() 方法。该方法初始化
    servlet,必须在生命之前调用
    对于 Servlet,init() 方法是
    仅调用一次。
  3. 初始化后,Servlet 可以为客户端请求提供服务。每个
    请求由其自己提供服务
    单独的线程。网络容器
    调用service()方法
    servlet 处理每个请求。这
    service() 方法确定类型
    提出请求和发送请求的数量
    到适当的方法来处理
    的请求。该开发商的
    servlet 必须提供一个实现
    对于这些方法。如果请求
    未实现的方法
    servlet制作完成后,方法
    父类通常被调用
    导致返回错误
    给请求者。
  4. 最后,Web 容器调用 destroy() 方法,该方法采用
    servlet 停止服务。销毁()
    方法,如 init(),仅被调用
    在 servlet 的生命周期中一次。

This is handled by the Servlet Container (also called the Web Container).
The Servlet Container is responsible for maintaining the Servlet Lifecycle.

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

Life cycle of a servlet

  1. The container calls the no-arg constructor.
  2. The Web container calls the init() method. This method initializes the
    servlet and must be called before life
    of a servlet, the init() method is
    called only once.
  3. After initialization, the servlet can service client requests. Each
    request is serviced in its own
    separate thread. The Web container
    calls the service() method of the
    servlet for every request. The
    service() method determines the kind
    of request being made and dispatches
    it to an appropriate method to handle
    the request. The developer of the
    servlet must provide an implementation
    for these methods. If a request for a
    method that is not implemented by the
    servlet is made, the method of the
    parent class is called, typically
    resulting in an error being returned
    to the requester.
  4. Finally, the Web container calls the destroy() method that takes the
    servlet out of service. The destroy()
    method, like init(), is called only
    once in the lifecycle of a servlet.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文