如何分配线程来处理Servlet请求?

有人可以请解释什么是每个请求的线程和每个连接线程? servlet的工作模式是什么? 如何分配线程来处理HTTP请求? 它是线程/请求还是连接?

假设我想要在ServletdoGet()方法中asynchronous执行耗时的任务,我使用Java执行程序启动一个新的线程,以便在一个单独的线程中完成冗长的计算,并立即发送响应。

现在是否确保我已经释放了处理我的HttpServletRequest的线程,还是仍在使用,因为子线程仍在运行?

每个请求意味着当发出一个HTTP请求时,一个线程被创build或从一个池中检索来提供。 一个线程服务于整个请求。 每个连接的线程将是相同的东西,除了线程用于整个连接,这可能是多个请求,也可能有很多死间隔在请求之间。 Servlet容器是每个请求的线程。 可能有一些实现为每个连接提供线程,但是我不知道,而且看起来很浪费。

在另一个线程中创build一个线程并不build立任何特殊的关系,而在大多数情况下这样做的关键就是让一个线程在另一个线程继续工作的同时做更多的工作或终止。 在你的场景中,如你所期望的那样,使用不同的线程来完成请求所要求的工作将允许立即发送响应。 用于服务该请求的线程也将立即可用于其他请求,无论您的其他线程完成多长时间。 这几乎是在请求线程的servlet容器中进行asynchronous工作方式。

注意事项:如果你在一个完整的Java EE容器中,可能会为你pipe理线程,这使得产生自己的线程成为一个坏主意。 在这种情况下,你最好向容器索要一个线程,但总的原则是一样的。