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

时间:2019-04-02 05:29:26

标签: java multithreading jsp tomcat servlets

这是《 Head First Servlets and JSP》一书的摘录。我不明白的是为什么为什么init()方法仅在线程A中运行,而之后的service()方法却在不同的线程B中运行。 >

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

enter image description here

2 个答案:

答案 0 :(得分:5)

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


对于每个新请求和线程HttpRequestHttpResponse对象将是新的,但servlet实例不是

答案 1 :(得分:1)

此描述适用于单个servlet实例。直观地,您可以将其视为在其他线程中处理请求而不阻塞主线程。如果请求是耗时的,则没有必要冻结应用程序来为其提供服务,因此每个请求都会导致派生。