采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,您好!springmvc controller->service->dao 在两个用户修改同一条记录的极端场景下是不是也会有并发问题?即使没有使用static变量,是不是也会出现A修改成功但却是看到了B修改的结果? 谢谢!
你好,这个要看实际操作时是否加锁,dao对于db的更新操作,也要看是否加了乐观锁。本质上这种并发问题与controller-service-dao这个层级是没什么关系的,只看你是如何进行更新的。
假如,极端场景下两个http请求同时发起修改同一条记录,service,dao的bean都是单例的,服务器又是多核的,有没有可能http1调用dao的a方法时没执行完成开始执行http2调用dao的a方法,http2的调执行完成后再执行http1 dao a方法剩下的步骤?这样http1就覆盖了http2的修改,这样的结果会不是会发生呢?是不是也算是多线程并发的一种呢?因为平时项目中这些方法也没有加同步,在用户量少没有高并发的情况是否不加同步也可以?一直很困惑,请老师帮忙解惑,谢谢!
你好,通常这种都很少加锁的(我们在个别并发特别高的项目里才会加乐观锁),因为大部分这种更新都是一个表的更新,更新完一般会展示详情,这时如果真有并发还可以再改一下,绝大部分的管理功能都可以这样设计。通常有时需要加锁,是针对某些计算及状态特别敏感的场景,比如订单状态更新、实时记账等等,这些场景如果某个操作被覆盖影响很大,比如订单定时取消了,相关的释放了很多资源,而另一个线程又来更新说订单成功了,这种就必须加锁了,这时更新状态时都特别建议加上对更新之前状态的校验。
登录后可查看更多问答,登录/注册
构建完整并发与高并发知识体系,倍增高薪面试成功率!
1.7k 1
1.1k 18
1.1k 15
3.5k 12
1.2k 12