Java 并发学习
(九)-AtomicIntegerFieldUpdater 字段原子更新
类
前面讲的两个 AtomicInteger 和 AtomicIntegerArray,这两个都是在最初设计编
码时候就已经考虑到了需要保证原子性。但是往往有很多情况就是,由于需求的
更改,原子性需要在后面加入,类似于我不要求你这整个类操作具有原子性,我
只要求你里面一个字段操作具有原子性。没错,concurrent.atomic 包下
AtomicIntegerFieldUpdater 就是这个作用的。
AtomicXXXFieldUpdater 主要包括以下几个:AtomicIntegerFieldUpdater,
AtomicLongFieldUpdater,AtomicReferenceFieldUpdater。
What is AtomicIntegerFieldUpdater
相信前言部分讲的已经很清晰易懂了,AtomicIntegerFieldUpdater 就是用来更
新某一个实例对象里面的 int 属性的。
但是注意,在用法上有规则:
� 字段必须是 volatile 类型的,在线程之间共享变量时保证立即可见
� 字段的描述类型( 修饰符 public/protected/default/private )是与调用者与操作
对象字段的关系一致。 也就是说调用者能够直接操作对象字段 ,那么就可以反射进
行原子操作。
� 对于父类的字段,子类是不能直接操作的,尽管子类可以访问父类的字段。
� 只能是实例变量,不能是类变量,也就是说不能加 static 关键字。
� 只能是可修改变量,不能使 final 变量,因为 final 的语义就是不可修改。
� 对于 AtomicIntegerFieldUpdater 和 AtomicLongFieldUpdater 只能修改 int/long 类
型的字段,不能修改其包装类型(Integer/Long)。如果要修改包装类型就需要使
用 AtomicReferenceFieldUpdater。
具体规则可以通过以下测试例子来分析:
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
评论0
最新资源