Java多线程:“JUC原子类”05之AtomicLongFieldUpdater原子2014-06-02 cnblogs skywang12345AtomicLongFieldUpdater介绍和函数列表AtomicLongFieldUpdater可以对指定"类的 "volatile long"类型的成员"进行原子更新。 它是基于反射原理实现的。AtomicLongFieldUpdater函数列表
// 受保护的无操作构造方法,供子类使用。protected AtomicLongFieldUpdater()// 以原子方式将给定值添加到此更新器管理的给定对象的字段的当前值。long addAndGet(T obj, long delta)// 如果当前值 == 预期值,则以原子方式将此更新器所管理的给定对象的字段设置为给定的更新值。abstract boolean compareAndSet(T obj, long expect, long update)// 以原子方式将此更新器管理的给定对象字段当前值减 1。long decrementAndGet(T obj)// 获取此更新器管理的在给定对象的字段中保持的当前值。abstract long get(T obj)// 以原子方式将给定值添加到此更新器管理的给定对象的字段的当前值。long getAndAdd(T obj, long delta)// 以原子方式将此更新器管理的给定对象字段当前值减 1。long getAndDecrement(T obj)// 以原子方式将此更新器管理的给定对象字段的当前值加 1。long getAndIncrement(T obj)// 将此更新器管理的给定对象的字段以原子方式设置为给定值,并返回旧值。long getAndSet(T obj, long newValue)// 以原子方式将此更新器管理的给定对象字段当前值加 1。long incrementAndGet(T obj)// 最后将此更新器管理的给定对象的字段设置为给定更新值。abstract void lazySet(T obj, long newValue)// 为对象创建并返回一个具有给定字段的更新器。static <U> AtomicLongFieldUpdater<U> newUpdater(Class<U> tclass, String fieldName)// 将此更新器管理的给定对象的字段设置为给定更新值。abstract void set(T obj, long newValue)// 如果当前值 == 预期值,则以原子方式将此更新器所管理的给定对象的字段设置为给定的更新值。abstract boolean weakCompareAndSet(T obj, long expect, long update)
AtomicLongFieldUpdater示例
// LongTest.java的源码import java.util.concurrent.atomic.AtomicLongFieldUpdater;public class LongFieldTest {public static void main(String[] args) {// 获取Person的class对象Class cls = Person.class; // 新建AtomicLongFieldUpdater对象,传递参数是“class对象”和“long类型在类中对应的名称”AtomicLongFieldUpdater mAtoLong = AtomicLongFieldUpdater.newUpdater(cls, "id");Person person = new Person(12345678L);// 比较person的"id"属性,如果id的值为12345678L,则设置为1000。mAtoLong.compareAndSet(person, 12345678L, 1000);System.out.println("id="+person.getId());}}class Person {volatile long id;public Person(long id) {this.id = id;}public void setId(long id) {this.id = id;}public long getId() {return id;}}