Java 基于Servlet服务方法的同步

Java 基于Servlet服务方法的同步,java,servlets,Java,Servlets,我在阅读Servlet规范时发现: 对于未实现SingleThreadModel接口的servlet,如果服务 方法(或分派到服务的方法,如doGet或doPost) HttpServlet抽象类)的方法已使用synchronized 关键字,servlet容器不能使用实例池方法,但必须 通过它序列化请求 我不明白为什么servlet容器不能将实例池方法与同步服务方法结合使用。实例池是否包含Servlet的不同实例,以便每个实例都使用自身来同步方法(而不是相互阻塞) 据我所知,在这种情况下,同步

我在阅读Servlet规范时发现:

对于未实现SingleThreadModel接口的servlet,如果服务 方法(或分派到服务的方法,如doGet或doPost) HttpServlet抽象类)的方法已使用synchronized 关键字,servlet容器不能使用实例池方法,但必须 通过它序列化请求

我不明白为什么servlet容器不能将实例池方法与同步服务方法结合使用。实例池是否包含Servlet的不同实例,以便每个实例都使用自身来同步方法(而不是相互阻塞)

据我所知,在这种情况下,同步将是无用的,但它不会阻止servlet容器使用实例池

我错过了什么


谢谢。

这句话的意思是,如果您不实现
SingleThreadModel
,那么您的Servlet实例将根本不会被池化,无论它是否使用
同步。它提到
同步
的唯一原因是警告Servlet容器不会在每个VM上使用多个Servlet实例来允许它同时处理多个请求

这是规范中另一个缺失的片段:

SRV.2.2实例数

作为的一部分的servlet声明 包含 servlet,如第SRV.13章“部署描述符”所述, 控制servlet容器如何提供servlet实例。 对于不在分布式环境中托管的servlet(默认), servlet容器每个servlet只能使用一个实例 声明但是,对于实现SingleThreadModel的servlet 接口,servlet容器可以实例化多个实例以 处理繁重的请求负载并将请求序列化到特定的 实例。Servlet生命周期19 作为部署描述符中标记的应用程序的一部分部署 作为可分发的,一个容器每个servlet只能有一个实例 每个Java虚拟机(JVMTM)的声明1但是,如果 可分发应用程序中的servlet实现 SingleThreadModel接口,容器可以实例化多个 容器的每个JVM中该servlet的实例


感谢您的回答,我理解了为什么不管您提到的同步关键字是什么,实例池方法都不起作用。但是,我看不出提到synchronization关键字会如何警告servlet容器将只使用一个实例。