Java 的对象原子性
2018-08-03 本文已影响5人
yunhen
AtomicReference、AtomicStampedReference、AtomicMarkableReference
这三个都是自JDK1.5开始加入到java.util.concurrent.atomic
下面的。他们都可以在lock-free的情况下以原子的方式更新对象引用。
区别在于:AtomicStampedReference
内部维护了一个[reference, integer] pairs
的二元组。AtomicMarkableReference
内部维护了一个[reference, boolean] pairs
的二元组。
AtomicStampedReference
中的stamp用来保证是否被重复修改
主要方法
//比较设置 参数依次为:期望值 写入新值 期望时间戳 新时间戳
public boolean compareAndSet(V expectedReference,V
newReference,int expectedStamp,int newStamp)
//获得当前对象引用
public V getReference()
//获得当前时间戳
public int getStamp()
//设置当前对象引用和时间戳,这个方法不是原子性的
public void set(V newReference, int newStamp)