佬们,黑马点评的这个乐观锁搞不懂,求教呀

就是这个,百思不得其解。个人理解它的本质是:1、通过rr默认隔离级别下给当前记录加锁,只允许当前事务update,令多个事务串行处理该记录。2、判断库存数>0,才进行库存扣减。

这跟乐观锁有什么关系呢?这不只是一个条件判断sql吗?如果说认为这是单纯靠库存字段作为乐观锁,那还是可能出现多个事务判断库存>0,并一起扣减,导致超卖,想解决该问题本质还是靠记录锁呀,记录锁不是悲观的吗

不知道我是不是哪里理解错了,大佬们教教我!!😭

全部评论
是的,借助数据库update的行锁是悲观锁,并没有用到版本号之类的机制
3 回复 分享
发布于 10-21 11:44 江西
一般来说update语句是原子性的吧 不会出现多个事务判断库存大于0并且以相同的值扣减吧
2 回复 分享
发布于 10-21 11:46 江西
stock严格相等的相当于代替了乐观锁里版本version的功能,但这样在高并发的时候成功率会比较低。但其实只要所有下单数不超过总stock就行,所以不必严格等于之前的stock,只要总stock大于0就可以下单。
2 回复 分享
发布于 10-21 11:58 河南
同问
1 回复 分享
发布于 10-21 11:44 江苏
java层面并没有解决并发安全问题,而mysql是通过mvcc机制保证不会出现并发安全问题。在并发访问同一行数据,会加行锁。
点赞 回复 分享
发布于 10-21 15:44 四川
因为where条件的是索引,所以会是行锁。只不过这种情况下,并发量高的话,会消耗CPU资源,还是建议你继续往后学
点赞 回复 分享
发布于 10-22 08:20 上海
你这个问题我当时还真没注意到呢。我觉得这个不是乐观锁,因为数据库肯定加了行锁
点赞 回复 分享
发布于 11-09 15:20 上海

相关推荐

4 44 评论
分享
牛客网
牛客企业服务