解决 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 锁是另一个可行的选择。