繁体   English   中英

如何使Servlet同步?

[英]How we can make servlet synchronized?

我正在研究servlet,并且希望使servlet同步。所以任何人都可以帮助我,使它成为可能。

使Servlet同步是一个非常糟糕的设计。 它的主要目的将被破坏。 Servlet的设计方式应使其可以同时处理多个请求! 此外,该servlet不应包含任何状态存储,并且需要进行同步。 请重新考虑您的设计

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

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

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

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

尽管SingleThreadModel技术易于使用,并且在低容量站点上效果很好,但是它的伸缩性不好。 如果您希望用户将来会增加,那么最好对共享数据实施显式同步。 但是,关键是要有效地最小化同步的代码量,以便最大程度地利用多线程。

另外,请注意,从服务器的角度来看,SingleThreadModel占用大量资源。 但是,最严重的问题是并发请求数耗尽了servlet实例池。 在这种情况下,所有未服务的请求都将排队等待,直到有空闲的东西为止-这会导致性能下降。 由于使用情况不确定,因此即使您确实增加了内存并增加了实例池的大小,也可能无济于事。

使Servlet同步确实是一个糟糕的设计。 您一次只能处理一个以上的客户。 如果您希望代码的某些部分是线程安全的,建议您使代码块同步。 请看看这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM