为什么servlet的init()方法在不同的线程中运行?

问题描述 投票:5回答:2

这是“Head First Servlets and JSP”一书的摘录。我不明白为什么init()方法单独运行在线程A,以及service()方法在不同的线程,B运行之后。

这是否意味着从浏览器到servlet的每个请求都有两个线程?或者init()对于容器可能创建的所有servlet实例是否通用?这是错误的,因为它不是静态方法?

enter image description here

java multithreading jsp tomcat servlets
2个回答
5
投票

servlet仅由init()初始化一次,但是对于每个新请求,都会从池中创建或分配新线程,以便在适当的方法上调用该servlet实例。


HttpRequestHttpResponse对象对于每个新请求和线程都是新的,而不是servlet实例。


1
投票

此描述适用于单个servlet实例。直观地,您可以将其视为在其他线程中处理请求而不阻止主线程。如果请求的时间成本很高,那么冻结应用程序来提供服务是没有意义的,因此每个请求都会导致分叉。

© www.soinside.com 2019 - 2024. All rights reserved.