本文主要是介绍高并发-乐观锁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
例子:抢购商品
逻辑: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请求)
完成第一步:
完成第二步:
这篇关于高并发-乐观锁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!