【发布时间】:2014-08-13 09:16:28
【问题描述】:
通常,容器中只有一个特定 servlet 的实例。这个 servlet 被重用于每个请求。但是,默认情况下,每个 servlet 请求都在不同的线程中运行。例如,如何在对 doPost(request, response) 的两个不同调用中只存在一个扩展 HttpServlet 的 servlet 实例?
我想确认是否有两个堆栈为此使用一个堆。
【问题讨论】:
-
无论你有多少个
HttpServlet实例——每次调用doPost都会有它的私有堆栈,但所有调用都使用一个堆。这对于 Java 中的每个方法调用都是一样的。 -
我不确定您的要求。如果您对如何由多个线程共享同一个 servlet 实例有疑问,这几乎就像您实例化一个对象,创建多个线程并将相同的对象实例传递给所有这些线程(我不知道 servlet 框架的内部结构给你一个准确的解释)。
-
watery 说了什么。实例化 servlet 以及创建和管理访问该实例的线程由 Servlet 容器完成。所以你不必担心。而且所有线程都有自己的栈,只有一个堆。
-
@isnot2bad 除非我们实现 SingleThreadModel 接口,否则容器可能会在容器的每个 JVM 中实例化该 servlet 的多个实例。
-
每个线程都有自己的堆栈。这与 Servlet 甚至 Java 无关:对于每个设计的线程实现都是如此。
标签: java multithreading tomcat servlets