Servlet线程安全,无需实现SingleThreadModel

时间:2014-12-18 14:29:48

标签: java servlets thread-safety

我正在研究java Web应用程序。我通过Android设备使用Web服务调用servlet。当我试图一次使用10到15个设备的web服务调用servlet时,只有2-3个设备得到了响应,设备上的所有应用程序都崩溃了。因为我的servlet默认是多线程的,所以它无法处理所有请求。

为此,我尝试实现SingleThreadModel,这将成功使用10-15个设备,但对于少量请求,它可以。但对于1000到10000个设备,实现SingleThreadModel是不切实际的,因为它一次只处理单个请求,同时所有剩余的请求必须在队列中等待。

所以任何人都建议我除了实现SingleThreadModel之外的任何其他解决方案,这会降低我的应用程序的性能。

1 个答案:

答案 0 :(得分:0)

IMHO,Container为每个servlet只创建一个对象,然后使用该对象通过为每个servlet生成线程来为多个请求提供服务。

  1. 由于您的servlet成功提供多个请求,因此容器实际上可能一次限制请求的数量,您可以配置。
  2. 需要通过synchronization实现进行数据库事务,会话对象操作等的Servlet,以保护数据免受损坏和遗漏信息的影响。
  3. 我们需要注意的是,同步应尽可能在最小的语句/方法上进行,以便其他线程不必等待很长时间。浏览器有可能决定服务器没有响应,以防请求由于大型同步代码而等待太长时间,并且请求崩溃。
  4. 如果我错了,请纠正我。