[toc]
为什么需要AtomicXXXFieldUpdater
如果一个类是自己编写的,则可以在编写的时候把成员变量定义为Atomic类型。但如果是一个已经有的类,在不能更改其源代码的情况下,要想实现对其成员变量的原子操作,就需要AtomicIntegerFieldUpdater、AtomicLongFieldUpdater 和AtomicReferenceFieldUpdater。
AtomicIntegerFieldUpdater
这里要说明的是AtomicIntegerFieldUpdater是一个虚类,AtomicIntegerFieldUpdaterImpl继承了AtomicIntegerFieldUpdater并实现了AtomicIntegerFieldUpdater提供的虚函数,在newUpdater的时候返回了AtomicIntegerFieldUpdaterImpl的实体,所以我们的进行操作的时候实际上使用的AtomicIntegerFieldUpdaterImpl对象,继而进行数据的CAS操作。
1 | package java.util.concurrent.atomic; |
构造函数无法直接构造器对象,需要使用静态函数和反射
1 | // 首先,其构造函数是protected,不能直接构造其对象,必须通过它提供的一个静态函数来创建 |
newUpdater(..)静态函数传入的是要修改的类(不是对象)和对应的成员变量的名字,内部通过反射拿到这个类的成员变量,然后包装成一个AtomicIntegerFieldUpdater对象。所以,这个对象表示的是类的某个成员,而不是对象的成员变量。
1 |
|
1 |
|