Java并发问题,后台管理系统的并发?

后台管理系统,两个用户登录网站,点击查询页面,后端返回前台数据展示,一个用户点击审核校验是否已审核过,已审核则前端卡控,完成操作后,另一个用户进行审核,由于没有点击刷新,数据还是未审核,又进行了审核。结果是审核结果是后一个用户审核的结果,数据不一致。

阅读 2.1k
3 个回答
✓ 已被采纳

这种问题其实就是代码逻辑写得不严谨导致的。
update set state = 1; //这种不管前因后果统一update的语句就经常出问题

//这种写法不管多少个人在操作都不会有问题。
update set state = 1 where state = 0;
//在且仅在未审核的情况下才会将数据改为审核通过,是为数据库乐观锁

第二个用户再审核的时候,后端需要判断审核状态,如果是未审核才可以进行审核

后端也需要判断审核状态,同时为了防止并发,如果是单系统,最好在controller上增加synchronized ,如果是多系统,最好在用一些分布式锁 例如redis分布式锁setnx等控制这条记录只会被一个人去审核

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题