我们如何使servlet同步?

时间:2013-10-22 05:19:41

标签: java servlets

我正在研究一个servlet,我想让我的servlet同步。所以,任何人都可以帮助我了解它是如何实现的。

3 个答案:

答案 0 :(得分:3)

使servlet同步是一个非常糟糕的设计。它的主要目的将被销毁。 Servlet的设计应该能够同时处理多个请求!而且,servlet不应包含任何状态存储并按需要同步。请重新考虑您的设计

答案 1 :(得分:2)

无论何时同步代码块,都会在系统中引入瓶颈。同步代码块时,告诉JVM在给定时刻只有一个线程可能位于此同步代码块中。如果我们运行多线程应用程序并且线程运行到由另一个线程执行的同步代码块,则第二个线程必须等到第一个线程退出该块。

准确识别真正需要同步的代码块并尽可能少地进行同步非常重要。

请注意,您不需要(也不应该)同步本地数据或参数。特别是你不应该同步service()方法! (或doPost(),doGet()等。)

  

启用线程安全servlet的更好方法是什么?   SingleThreadModel接口或同步?

尽管SingleThreadModel技术易于使用,并且适用于低容量站点,但它不能很好地扩展。如果您预计将来会增加用户,则最好为共享数据实现显式同步。但关键是要有效地最小化同步的代码量,以便最大限度地利用多线程。

另外,请注意,从服务器的角度来看,SingleThreadModel是非常耗费资源的。然而,最严重的问题是并发请求的数量耗尽了servlet实例池。在这种情况下,所有未提供服务的请求都会排队,直到某些内容变为空闲状态 - 这会导致性能下降。由于使用是非确定性的,即使您添加了更多内存并增加了实例池的大小,也可能没什么用处。

答案 2 :(得分:2)

使servlet同步是一个糟糕的设计。您无法一次处理多个客户端。如果您希望代码的某些部分是线程安全的,我建议您同步一段代码。请查看here