众所周知,当servlet接收请求时,它会创建一个新线程,并在新线程内部调用服务方法。因此,只有一个Servlet实例,可以调用许多线程。
我不明白的是HttpServlet
如何在不实现runnable或扩展线程的情况下创建自己实例的线程?
任何人都可以澄清一下。
答案 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的生命周期
- 容器调用no-arg构造函数。
- Web容器调用init()方法。这个方法初始化了 servlet,必须在生命之前调用 一个servlet,init()方法是 只召唤一次。
- 初始化后,servlet可以为客户端请求提供服务。每 请求是自己提供的 单独的线程。 Web容器 调用的service()方法 每个请求的servlet。该 service()方法确定种类 要求发出和发送 它是一个适当的方法来处理 请求。开发者 servlet必须提供实现 对于这些方法。如果请求一个 没有实现的方法 servlet是制作的,方法的 通常会调用父类 导致返回错误 请求者。
- 最后,Web容器调用带有的destroy()方法 servlet停止服务。毁灭() 方法,如init(),仅被调用 一次进入servlet的生命周期。
醇>