乐观锁存在的Bug

博客讨论了乐观锁在数据库中的应用,指出线程1和2的并发操作可能导致支付宝赠送红包逻辑的错误,并强调示例代码并非真正的乐观锁。解释了乐观锁的正确实现方式,包括在更新时同时检查版本号,以及MyBatis和Hibernate中的乐观锁实现。还提到了阿里编程规范对乐观锁使用的警告,建议根据业务场景来决定处理并发冲突的策略。
摘要由CSDN通过智能技术生成

数据表中:记录 x.value = 50, y.value = 50;
假设 支付宝 中,x、y 是 情侣,对于每对情侣总金额小于100元的,支付宝决定赠送 100元 红包。

线程1:
if (x.value + y.value <= 100) {
x.value += 100;
}

线程2:
if (x.value + y.value <= 100) {
y.value += 100;
}
```
线程1 执行 if 后,线程2再执行if,都满足条件。
接着线程1修改x的值,再提交,发现x的版本号没变,修改成功,x版本号加1:x.value = 150 
然后线程2修改y的值,再提交,发现y的版本号没变,修改成功,y版本号加1:y.value = 150 
支付宝就损失了 100 元。

这好像不是锁的问题而是你的逻辑的问题,是不是歌词下载这种操作,每次应该修改x,y两个的版本号,而不是单一个

没看懂你说的什么意思,我就没看到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值