多个实例时Servlet同步

时间:2011-12-31 11:10:37

标签: java multithreading servlets synchronization

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

3 个答案:

答案 0 :(得分:3)

规范(3.0)第2.2节说:

  

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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