Java AtomicStampedReference And AtomicReference

背景

解决CAS的ABA问题

AtomicReference

原理

AtomicReference和AtomicInteger非常类似,不同之处就在于AtomicInteger是对整数的封装,而AtomicReference则对应普通的对象引用。也就是它可以保证你在修改对象引用时的线程安全性。

在介绍AtomicReference的同时,我希望同时提出一个有关原子操作的逻辑上的不足。

https://segmentfault.com/a/1190000004452926

AtomicStampedReference

原理

AtomicStampedReference内部不仅维护了对象值,还维护了一个类似时间戳的字段作为版本号(它可以使任何一个整数,它使用整数来表示状态值)。

当AtomicStampedReference对应的数值被修改时,除了更新数据本身外,还必须要更新版本号。

当AtomicStampedReference设置对象值时,对象值以及版本号都必须满足期望值,写入才会成功。因此,即使对象值被反复读写,写回原值,只要版本号发生变化,就能防止不恰当的写入。