Java源码学习--并发量06--01--AtomicInteger

AtomicInteger

一、结构

  • 实现了Number抽象类,定义了一些默认方法
public abstract class Number implements java.io.Serializable {
    public abstract int intValue();
    public abstract long longValue();
    public abstract float floatValue();
    public abstract double doubleValue();

    public byte byteValue() {
        return (byte)intValue();
    }

    public short shortValue() {
        return (short)intValue();
    }
|

二、重要属性

  • 代码
public class AtomicInteger extends Number implements java.io.Serializable {
    private static final long serialVersionUID = 6214790243416807050L;

    //获取内存地址的类
    private static final Unsafe unsafe = Unsafe.getUnsafe();
    //value的偏移量
    private static final long valueOffset;

    //静态方法,获取value字段中的偏移量
    static {
        try {
            valueOffset = unsafe.objectFieldOffset
                (AtomicInteger.class.getDeclaredField("value"));
        } catch (Exception ex) { throw new Error(ex); }
    }

    //具体的值
    private volatile int value;
}
  • 对于CAS操作而言,是通过对象+偏移量来获取属性的具体值

三、重要方法

  • 代码
    // 初始化
    public AtomicInteger(int initialValue) {
        value = initialValue;
    }
    // 得到当前值
    public final int get() {
        return value;
    }
    // 自增 1,并返回自增之前的值
    public final int getAndIncrement() {
        return unsafe.getAndAddInt(this, valueOffset, 1);
    }
    // 自减 1,并返回自增之前的值
    public final int getAndDecrement() {
        return unsafe.getAndAddInt(this, valueOffset, -1);
    }
    
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页