JBoss 4.2.3 如何实现 SingleThreadModel (STM):1 个 servlet 实例或多个 servlet 实例?

How JBoss 4.2.3 implements SingleThreadModel (STM): 1 instance of a servlet OR multiple instances of a servlet?

我正在开发部署到 JBoss 4.2.3 的企业应用程序。它使用 Servlet 2.5 规范。

该应用程序有一些 JSP 使用带有此指令的 SingleThreadModel (STM):<%@ page isThreadSafe="false" %>

我想知道JBoss4.2.3是如何实现SingleThreadModel(STM)的:

  1. 它是否只有 1 个 servlet 实例并序列化所有请求 在上面吗?
  2. 或者它有一个servlet的多个实例并处理每个请求 同时?

我如何找到这些信息?

谢谢

根据 JBOSS Documents,这可以在两种模型中完成:

The servlet container can make this guarantee by synchronizing access to a single instance of the servlet, or by maintaining a pool of servlet instances and dispatching each new request to a free servlet

注意这不是完全线程安全的:

Note that SingleThreadModel does not solve all thread safety issues

和:

session attributes and static variables can still be accessed by multiple requests on multiple threads at the same time

所以我认为答案是这个指令(以及扩展 SingleThreadModel servlets)将阻止多个线程调用 单个实例 service 方法] 您的 servlet 的同时 不会 阻止 Web 服务器使用 servlet 的多个实例同时处理请求。

换句话说,单个实例不会同时服务于多个线程中的请求,但是网络服务器可以创建多个servlet实例并将每个请求同时分配给一个实例。

更新

我在catalina core中发现了一个20 maxInstances的常量,它将实例化最多20个servlet实例来服务同时接收到一个servlet的请求,如果没有空闲实例,则等待有空闲servlet 实例。