乐观锁有什么缺点?
乐观锁避免了悲观锁独占对象的现象,同时也提高了并发性能,但它也有缺点:
1.乐观锁只能保证一个共享变量的原子操作。如果多一个或几个变量,乐观锁将变得力不从心,但互斥锁能轻易解决,不管对象数量多少及对象颗粒度大小。
2.长时间自旋可能导致开销大。假如CAS长时间不成功而一直自旋,会给CPU带来很大的开销。
3.ABA问题。CAS的核心思想是通过比对内存值与预期值是否一样而判断内存值是否被改过,但这个判断逻辑不严谨,假如内存值原来是A,后来被一条线程改为B,最后又被改成了A,则CAS认为此内存值并没有发生改变,但实际上是有被其他线程改过的,这种情况对依赖过程值的情景的运算结果影响很大。解决的思路是引入版本号,每次变量更新都把版本号加一。、
猜你喜欢:
课程。获取【Java视频教程+资料】加播妞:435946716。
-
Java教程
-
Java教程
-
Java教程
-
Java教程
-
Java教程
-
Java教程
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/java/253757.html