【发布时间】:2010-01-29 06:15:01
【问题描述】:
在不减慢进程的同时避免jsp中的竞争条件的最佳方法是什么。我试过了 isThreadSafe=false 同步(会话)
但是还有其他可用的替代解决方案吗?
【问题讨论】:
在不减慢进程的同时避免jsp中的竞争条件的最佳方法是什么。我试过了 isThreadSafe=false 同步(会话)
但是还有其他可用的替代解决方案吗?
【问题讨论】:
一刀切的解决方案(例如threadSafe=false)会导致一次执行一个请求。这不可避免地会减慢请求处理速度。
为了避免这种情况,您需要了解为什么会出现竞争条件并(重新)设计架构以避免该问题。例如:
如果竞争条件是在更新某些共享的内存中数据结构时,您需要在适当的粒度级别同步对数据结构的访问和更新
如果竞争条件是在更新您的数据库时,您需要重组您的 SQL 以使用适当粒度级别的事务。
这些只是(可能的)用于解决竞争条件问题的模式。实际上,您必须自己了解根本原因。
【讨论】:
这取决于你为什么会有竞争条件。
最简单的想法是没有可写入的全局变量。
在仅使用局部变量的方法中执行所有逻辑。
在你的 jsp 页面中没有任何 java 代码,但是调用一个 bean 来执行操作。
你在做什么导致竞态条件?
【讨论】:
isThreadSafe=false
这可能会导致性能下降,因为它使页面访问顺序化。它也只会影响一个页面,因此如果您通过另一个页面访问数据,这对您没有任何作用。
synchronized(session)
这不能保证有效(尽管它会在某些服务器上作为实施的副作用)。
任何解决方案都可能需要有关您尝试保护的数据和服务器配置的更多信息。
【讨论】: