高并发-乐观锁

例子:抢购商品

逻辑:cas。首先保存一个商品信息的就职,然后处理其他业务,比如计算金额等。在准备减少商品记录时,先做一个对比,看还是不是有那么多件,是就更新,不是则更新失败。重新再执行。会出现ABA问题。

ABA问题举例:

1.你去机场坐飞机,带了一个黑色箱子,突然来了一个美女,你停下看美女,结果美女也拿了一个黑色箱子,并偷偷替换了你的箱子,这时候你看完美女了,一看箱子还是黑色,就直接上飞机了。

 2.有一个栈,栈里有a,b。现在想将a,b换个位置,将b作为栈顶。首先先记录原来的栈顶是a,这时,另一个线程将a,b弹出,依次压入c,d,a。现在栈已经变了,但是栈顶还是a,那么原来的线程就会继续将b作为栈顶,但其实b现在处于游离状态,所以b后面没有任何引用,结果c,d丢失了。

 

解决ABA问题。

1.加版本号,每更新一次版本号加一,判定也变成判定版本号是否相同。

2.加入重入操作机制(没成功就继续执行)

重入机制有两种一种限定时间内重入,一种限定重入次数(高并发下,这种重入次数会较少,减少sql请求)

完成第一步:

完成第二步:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值