java中AtomicIntegerFieldUpdate类可以实现原子方式更新一个变量
对于这个变量有如下的约束:
- 更新器更新的必须是int类型,不能是其包装类型Integer;
- 更新器更新的必须是volatile修饰的变量,确保线程之间共享变量的时候立即可见;
- 变量不能被static修饰,必须是实例变量。因为Unsafe.objectFieldOffset()方法不支持静态变量(CAS操作本质上是通过对象实例的偏移量来直接进行赋值);
- 更新器只能修改它可见范围内的变量,因为更新器是通过反射来得到这个变量,如果变量不可见就会报错;