原子地更新某类里的某一个字段时,就需要使用原子地更新字段类,原子包提供了以下4类进行原子地字段更新
AtomicIntegerFieldUpdater
AtomicLongFieldUpdater
AtomicStampedReference
AtomicReferenceFieldUpdater
使用此类的时候,必须遵循以下原则
- 字段必须是易失类型的,在线程之间共享变量时保证立即可见
- 字段的描述类型是与调用者与操作对象字段的关系一致。
- 意思是调用者能够直接操作对象字段,那么就可以引用进行原子操作。
- 对于父类的字段,子类是不能直接操作的,尽管子类可以访问父类的字段。
- 只能是实例变量,不能是类变量,否则不能加静态关键字。
- 只能是可修改变量,不能成为最终变量,因为最终的变量就是不可修改的。
- 对于AtomicIntegerFieldUpdater和AtomicLongFieldUpdater只能修改int/long类型的字段,不能修改其包装类型(Integer/Long)。
- 如果要修改包装类型就需要使用AtomicReferenceFieldUpdater。