- AtomicLongArray的作用则是对"长整形数组"进行原子操作,incrementAndGet()的作用是以原子方式将long数组的索引 i 的元素加1,并返回加1之后的值。
incrementAndGet()源码如下:
public final long incrementAndGet(int i) {
return addAndGet(i, 1);
}
public long addAndGet(int i, long delta) {
long offset = checkedByteOffset(i);
while (true) {
long current = getRaw(offset);
long next = current + delta;
if (compareAndSetRaw(offset, current, next))
return next;
}
}
private long getRaw(long offset) {
return unsafe.getLongVolatile(array, offset);
}
private boolean compareAndSetRaw(long offset, long expect, long update) {
return unsafe.compareAndSwapLong(array, offset, expect, update);
}
- AtomicLongFieldUpdater可以对指定"类的 'volatile long'类型的成员"进行原子更新。基于反射原理实现的。
static <U> AtomicLongFieldUpdater<U> newUpdater(Class<U> tclass, String fieldName)
public class LongFieldTest {
public static void main(String[] args) {
Class cls = Person.class;
AtomicLongFieldUpdater mAtoLong = AtomicLongFieldUpdater.newUpdater(cls, "id");
Person person = new Person(12345678L);
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;
}
}