杨利霞 发表于 2019-3-23 16:04

AtomicInteger类

AtomicInteger类

这一讲,主要讲讲AtomicInteger类,此类同样是Number的子类,同时实现 Serializable。

重点内容

属性:
private static final Unsafe unsafe = Unsafe.getUnsafe();

private static final long valueOffset;

private volatile int value;

静态代码块:
static {
        try {
            valueOffset = unsafe.objectFieldOffset
                (AtomicInteger.class.getDeclaredField("value"));
        } catch (Exception ex) { throw new Error(ex); }
    }
---------------------
构造方法
public AtomicInteger() {
    }

public AtomicInteger(int initialValue) {
        value = initialValue;
    }

对象方法:
public final int get() {
        return value;
    }


public final void set(int newValue) {
        value = newValue;
    }


public final void lazySet(int newValue) {
        unsafe.putOrderedInt(this, valueOffset, newValue);
    }


public final int getAndSet(int newValue) {
        for (;;) {
            int current = get();
            if (compareAndSet(current, newValue))
                return current;
        }
    }


public final boolean compareAndSet(int expect, int update) {
        return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
    }


public final boolean weakCompareAndSet(int expect, int update) {
        return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
    }

public final int getAndIncrement() {
        for (;;) {
            int current = get();
            int next = current + 1;
            if (compareAndSet(current, next))
                return current;
        }
    }

public final int getAndDecrement() {
        for (;;) {
            int current = get();
            int next = current - 1;
            if (compareAndSet(current, next))
                return current;
        }
    }


public final int getAndAdd(int delta) {
        for (;;) {
            int current = get();
            int next = current + delta;
            if (compareAndSet(current, next))
                return current;
        }
    }


public final int incrementAndGet() {
        for (;;) {
            int current = get();
            int next = current + 1;
            if (compareAndSet(current, next))
                return next;
        }
    }


public final int decrementAndGet() {
        for (;;) {
            int current = get();
            int next = current - 1;
            if (compareAndSet(current, next))
                return next;
        }
    }


public final int addAndGet(int delta) {
        for (;;) {
            int current = get();
            int next = current + delta;
            if (compareAndSet(current, next))
                return next;
        }
    }


public String toString() {
        return Integer.toString(get());
    }


public int intValue() {
        return get();
    }


public long longValue() {
        return (long)get();
    }


public float floatValue() {
        return (float)get();
    }


public double doubleValue() {
        return (double)get();
    }
---------------------
作者:feyshine
来源:CSDN





页: [1]
查看完整版本: AtomicInteger类