多个实例时Servlet同步

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

规范(3.0)的2.2节说:

对于未托管在分布式环境中的servlet(缺省值),servlet容器每个servlet声明必须只使用一个实例

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

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

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

http://docs.oracle.com/javaee/1.4/api/javax/servlet/SingleThreadModel.html