AtomicBoolean
private static final Unsafe unsafe = Unsafe.getUnsafe();
private static final long valueOffset;
private volatile int value;
AtomicInteger
private static final Unsafe unsafe = Unsafe.getUnsafe();
private static final long valueOffset;
private volatile int value;
解释
核心操作类Unsafe,JAVA提供工具类
unsafe.objectFieldOffset获得对象内存地址
unsafe.compareAndSwapInt native方法,比较并替换。原子性的操作
AtomicBoolean.compareAndSet(false,true);
public final boolean compareAndSet(boolean expect, boolean update) {
int e = expect ? 1 : 0;
int u = update ? 1 : 0;
return unsafe.compareAndSwapInt(this, valueOffset, e, u);
}
AtomicInteger.incrementAndGet();
public final int incrementAndGet() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return next;
}
}
网友评论