首页 » 排名链接 » 程序员(解决版本号变化就会程序员)

程序员(解决版本号变化就会程序员)

admin 2024-11-02 09:40:07 0

扫一扫用手机浏览

文章目录 [+]

在多线程环境下,相比于直接加锁,CAS性能要更好一些。
但CAS里面也存在一些问题,最主要的问题其实就是ABA问题了。
因为CAS需要在操作值的时候检查值有没有发生变化,没有发生变化就更新,有变化就不更新。

但是如果一个值原来是A又变成了B,然后又变成了A,使用CAS进行检查的时候就会发现它的值没有发生变化,但实际上它不仅变了,而且还变了两次。

要解决这个问题可以通过加版本号来解决,直接在变量前面加上版本号,每次变量更新的时候把版本号加一,这样ABA就会变成了1A-2B-3A,这样就能区分出来值的变化了。

程序员(解决版本号变化就会程序员) 排名链接
(图片来自网络侵删)

从JDK1.5开始,JUC的atomic包里边提供了一个叫做AtomicStampedReference的类来解决ABA问题。
AtomicStampedReference本质上就是通过版本号来解决ABA问题的。
它的内部维护了一个名叫Pair的数据结构,用volatile来修饰,确保它的可见性。
Pair将数据对象和版本号打包到一起进行比较,通过这种方式来解决了ABA问题。

点击关注。

标签:

相关文章

楼宇自控预算(楼宇自控系统预算设备)

一、楼宇自控的背景随着信息技术的迅猛发展和城市化进程的加速推进,智慧建筑作为未来城市发展的重要方向,成为了各界关注的焦点。而楼宇自...

排名链接 2025-01-03 阅读576 评论0