有人可以解释一下什么是每个请求线程和每个连接线程吗? servlet 适用于哪种模型?如何分配线程来处理 HTTP 请求?是线程/请求还是连接?
假设我想在我的计算机中执行一项耗时的任务Servlet
's doGet()
方法异步,我使用 Java 执行器启动一个新线程,以便在单独的线程中完成冗长的计算并立即发送响应。
现在这是否确保我已经释放了一直在处理我的线程HttpServletRequest
或者它仍然被使用,因为子线程仍在运行?
每个请求意味着当发出 HTTP 请求时,会创建一个线程或从池中检索一个线程来为其提供服务。一个线程处理整个请求。每个连接的线程是相同的,只是该线程用于整个连接,这可能是多个请求,并且请求之间也可能有很多死区时间。 Servlet 容器是每个请求的线程。可能有一些实现为每个连接提供线程,但我不知道,而且看起来这会非常浪费。
在另一个线程中创建一个线程不会建立任何特殊关系,在大多数情况下这样做的全部目的是让一个线程执行更多工作或在另一个线程继续工作时终止。在您的场景中,使用不同的线程来完成请求所需的工作将如您所料,允许立即发送响应。用于服务该请求的线程也将立即可用于另一个请求,无论其他线程需要多长时间才能完成。这差不多了the在每个请求一个线程的 servlet 容器中执行异步工作的方法。
Caveat:如果您处于完整的 Java EE 容器中,则可能会以某种方式为您管理线程,这使得生成您自己的线程成为一个坏主意。在这种情况下,您最好向容器请求线程,但一般原则是相同的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)