请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,您好!springmvc controller->service->dao 在两个用户修改同一条记录的极端场景下是不是也会有并发问题?

老师,您好!springmvc controller->service->dao 在两个用户修改同一条记录的极端场景下是不是也会有并发问题?即使没有使用static变量,是不是也会出现A修改成功但却是看到了B修改的结果?
谢谢!

正在回答 回答被采纳积分+3

1回答

Jimin 2018-11-09 23:17:19

你好,这个要看实际操作时是否加锁,dao对于db的更新操作,也要看是否加了乐观锁。本质上这种并发问题与controller-service-dao这个层级是没什么关系的,只看你是如何进行更新的。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉1908521903 #1
    假如,极端场景下两个http请求同时发起修改同一条记录,service,dao的bean都是单例的,服务器又是多核的,有没有可能http1调用dao的a方法时没执行完成开始执行http2调用dao的a方法,http2的调执行完成后再执行http1 dao a方法剩下的步骤?这样http1就覆盖了http2的修改,这样的结果会不是会发生呢?是不是也算是多线程并发的一种呢?因为平时项目中这些方法也没有加同步,在用户量少没有高并发的情况是否不加同步也可以?一直很困惑,请老师帮忙解惑,谢谢!
    回复 有任何疑惑可以回复我~ 2018-11-11 22:51:14
  • Jimin #2
    你好,通常这种都很少加锁的(我们在个别并发特别高的项目里才会加乐观锁),因为大部分这种更新都是一个表的更新,更新完一般会展示详情,这时如果真有并发还可以再改一下,绝大部分的管理功能都可以这样设计。通常有时需要加锁,是针对某些计算及状态特别敏感的场景,比如订单状态更新、实时记账等等,这些场景如果某个操作被覆盖影响很大,比如订单定时取消了,相关的释放了很多资源,而另一个线程又来更新说订单成功了,这种就必须加锁了,这时更新状态时都特别建议加上对更新之前状态的校验。
    回复 有任何疑惑可以回复我~ 2018-11-11 23:04:16
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信