如何避免竞争条件

时间:2010-01-29 06:15:01

标签: java jsp

在jsp中避免竞争条件的最佳方法是什么,同时不要放慢进程。我试过了 isThreadSafe = FALSE 同步(会话)

但是还有其他替代解决方案吗?

3 个答案:

答案 0 :(得分:6)

一个通用的解决方案(例如threadSafe=false)会导致一次执行一个请求。这不可避免地减慢了请求处理速度。

为了避免这种情况,您需要了解为什么要获得竞争条件并(重新)设计您的架构以避免问题。例如:

  • 如果竞争条件是对某些共享内存数据结构的更新,则需要以适当的粒度级别同步对数据结构的访问和更新

  • 如果竞争条件是对数据库的更新,则需要重新构建SQL以使用适当粒度级别的事务。

这些只是(可能的)模式,用于解决您的竞争条件问题。实际上,你必须自己了解根本原因。

答案 1 :(得分:5)

这取决于你有竞争条件的原因。

最简单的想法是没有你写的全局变量。

在仅使用局部变量的方法中执行所有逻辑。

在你的jsp页面中没有任何java代码,但是调用bean来执行操作。

你在做什么导致了竞争条件?

答案 2 :(得分:1)

isThreadSafe=false

这可能会导致性能不佳,因为它会使页面访问顺序。它也只会影响一个页面,所以如果你通过另一个页面访问数据,这对你没有任何作用。

synchronized(session)

这不能保证有效(尽管它会在某些服务器上作为实现的副作用)。

任何解决方案都可能需要有关您要保护的数据和服务器配置的更多信息。