美文网首页
AtomicReference和AtomicStampedRef

AtomicReference和AtomicStampedRef

作者: a丶逍遥子 | 来源:发表于2019-07-25 22:30 被阅读0次

AtomicReference存在一个问题,比如当获得对象当前数据A后,在准备修改为新值B前,对象的值被其他线程连续修改A1 -> A2 -> A,发现多次修改后,对象的值又恢复为旧值A。此刻当前线程就无法准确判断这个对象究竟是否被修改过。如图所示,显示了这种情况。(图片是转载而来)


image.png

一般来说,发生这种情况的概率很小。而且即使发生了,可能也不是什么大问题。比如,我们只是简单得要做一个数值加法,即使在我取得期望值后,这个数字被不断的修改,只要它最终改回了我的期望值,我的加法计算就不会出错。也就是说,当你修改的对象没有过程的状态信息,所有的信息都只保存于对象的数值本身。

AtomicStampedReference正是这么做的。它内部不仅维护了对象值,还维护了一个时间戳(我这里把它称为时间戳,实际上它可以使任何一个整数,它使用整数来表示状态值)。当AtomicStampedReference对应的数值被修改时,除了更新数据本身外,还必须要更新时间戳。当AtomicStampedReference设置对象值时,对象值以及时间戳都必须满足期望值,写入才会成功。因此,即使对象值被反复读写,写回原值,只要时间戳发生变化,就能防止不恰当的写入。

相关文章

网友评论

      本文标题:AtomicReference和AtomicStampedRef

      本文链接:https://www.haomeiwen.com/subject/pktlrctx.html