一起读读JAVA源码-Atomic

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;
        }
    }

你可能感兴趣的:(一起读读JAVA源码-Atomic)