解决 Java Spring 应用程序中竞争条件的最佳方法是什么?
What's best way to resolve race condition in Java Spring app?
我在 Spring 上开发了一个简单的测验 Web 应用程序,它实现了 "Quiz button",在客户端,玩家应该比其他人更快地点击按钮来获得分数。所以我有像
这样的控制器方法
@RequestMapping(value = "/pressButton", method = RequestMethod.POST)
public String processButtonClick(Authentication authentication) {
//return first player name
}
如何检查哪个用户首先点击了那个?如何在数据库更新时防止竞争条件?
您可以将您的方法分配给 synchronized
,这样它就不会同时 运行 多次。
我建议在您的数据库中为 userId 和 questionId 组合添加唯一约束。 synchronized 仅在只有一次服务实例时才有效,这在高度可扩展的环境中很少见。 Redis 锁是另一个可行的选择。
我在 Spring 上开发了一个简单的测验 Web 应用程序,它实现了 "Quiz button",在客户端,玩家应该比其他人更快地点击按钮来获得分数。所以我有像
这样的控制器方法@RequestMapping(value = "/pressButton", method = RequestMethod.POST)
public String processButtonClick(Authentication authentication) {
//return first player name
}
如何检查哪个用户首先点击了那个?如何在数据库更新时防止竞争条件?
您可以将您的方法分配给 synchronized
,这样它就不会同时 运行 多次。
我建议在您的数据库中为 userId 和 questionId 组合添加唯一约束。 synchronized 仅在只有一次服务实例时才有效,这在高度可扩展的环境中很少见。 Redis 锁是另一个可行的选择。