AtomicLongFieldUpdater介绍和函数列表
AtomicLongFieldUpdater可以对指定"类的 x27volatile longx27类型的成员"进行原子更新。它是基于反射原理实现的。
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; } }
运行结果:
id=1000
AtomicLongFieldUpdater源码分析(基于JDK1.7.0_40)
AtomicLongFieldUpdater完整源码
1 ...阅读原文
推荐文章
1. 专访唯品会架构师肖桦:做编码的架构师
(R:1092)[2015-06-22]
2. Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式 (R:874)[2017-04-25]
3. Java多线程系列--“JUC锁”07之 LockSupport (R:952)[2017-08-26]
4. Java多线程系列--“JUC锁”05之 非公平锁 (R:886)[2017-07-27]
5. Java多线程系列--“JUC锁”09之 CountDownLatch原理和示例 (R:1001)[2017-09-12]
6. Java多线程系列--“基础篇”04之 synchronized关键字 (R:972)[2017-05-01]
7. Java内存泄漏分析系列之六:JVM Heap Dump(堆转储文件)的生成和MAT的使用 (R:3098)[2019-03-04]
8. Java多线程系列--“JUC原子类”05之 AtomicLongFieldUpdater (R:905)[2017-07-17]
9. [置顶] 关于Java并发编程的总结和思考 (R:1161)[2017-08-16]
10. Java多线程系列--“JUC原子类”03之 AtomicLongArray原子类 (R:946)[2017-07-13]
11. Java多线程系列--“基础篇”08之 join() (R:954)[2017-05-29]
12. Java多线程系列--“基础篇”07之 线程休眠 (R:901)[2017-05-21]
13. Java多线程系列--“JUC锁”01之 框架 (R:935)[2017-07-19]
14. Java开发者值得关注的7款新工具 (R:1558)[2014-12-24]
15. 系统监控和流控-Java应用 (R:1368)[2016-09-04]
2. Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式 (R:874)[2017-04-25]
3. Java多线程系列--“JUC锁”07之 LockSupport (R:952)[2017-08-26]
4. Java多线程系列--“JUC锁”05之 非公平锁 (R:886)[2017-07-27]
5. Java多线程系列--“JUC锁”09之 CountDownLatch原理和示例 (R:1001)[2017-09-12]
6. Java多线程系列--“基础篇”04之 synchronized关键字 (R:972)[2017-05-01]
7. Java内存泄漏分析系列之六:JVM Heap Dump(堆转储文件)的生成和MAT的使用 (R:3098)[2019-03-04]
8. Java多线程系列--“JUC原子类”05之 AtomicLongFieldUpdater (R:905)[2017-07-17]
9. [置顶] 关于Java并发编程的总结和思考 (R:1161)[2017-08-16]
10. Java多线程系列--“JUC原子类”03之 AtomicLongArray原子类 (R:946)[2017-07-13]
11. Java多线程系列--“基础篇”08之 join() (R:954)[2017-05-29]
12. Java多线程系列--“基础篇”07之 线程休眠 (R:901)[2017-05-21]
13. Java多线程系列--“JUC锁”01之 框架 (R:935)[2017-07-19]
14. Java开发者值得关注的7款新工具 (R:1558)[2014-12-24]
15. 系统监控和流控-Java应用 (R:1368)[2016-09-04]