Java 多个实例时的Servlet同步

Java 多个实例时的Servlet同步,java,multithreading,servlets,synchronization,Java,Multithreading,Servlets,Synchronization,我已经读到servlet中的代码可以与同步块同步。然而,我也读到,虽然servlet通常只有一个实例,但servlet容器可能会保留一个实例池。当然这意味着同步块因此不能保证工作,因为您不知道请求线程将选择哪个实例?Servlet容器确实有一个线程池用于服务请求,这意味着可能会有多个线程执行Servlet代码,这意味着对任何共享可变数据的访问都需要正确同步。如果问题是如何使servlet成为单线程的,那么其中一种方法就是实现SingleThreadModel接口,但现在已被弃用 本规范(3.0)

我已经读到servlet中的代码可以与同步块同步。然而,我也读到,虽然servlet通常只有一个实例,但servlet容器可能会保留一个实例池。当然这意味着同步块因此不能保证工作,因为您不知道请求线程将选择哪个实例?

Servlet容器确实有一个线程池用于服务请求,这意味着可能会有多个线程执行Servlet代码,这意味着对任何共享可变数据的访问都需要正确同步。

如果问题是如何使servlet成为单线程的,那么其中一种方法就是实现SingleThreadModel接口,但现在已被弃用


本规范(3.0)第2.2节规定:

对于不在分布式环境中托管的servlet(默认), servlet容器每个servlet只能使用一个实例 声明


因此,如果容器使用实例池,这违反了规范。我不明白为什么容器会这样做,因为每个servlet开发人员都知道多个线程可以同时访问servlet,因此servlet必须是线程安全的。

我认为您应该阅读BalusC的以下两个答案:谢谢,这两个答案的共识是,每个servlet使用一个实例,因此同步将起作用。谢谢,这是我所期望的。我刚刚发现Tomcat实现了每个servlet的一个实例。要么我得到了错误的信息,要么一些容器确实违反了规范。也许你把“线程池”和“servlet实例池”混淆了。