美文网首页
AtomicBoolean类实现

AtomicBoolean类实现

作者: plan454 | 来源:发表于2017-02-07 23:43 被阅读0次

背景知识:

介绍:
AtomicBoolean 是atomic包下第一个类,是一个原子级的boolean的实现。

实现:
AtomicBoolean 是通过CAS 机制实现的支持并发。类中有三个重要属性

    private static final Unsafe unsafe = Unsafe.getUnsafe();
    private static final long valueOffset;

    static {
        try {
            valueOffset = unsafe.objectFieldOffset
                (AtomicBoolean.class.getDeclaredField("value"));
        } catch (Exception ex) { throw new Error(ex); }
    }

    private volatile int value;

Unsafe类提供cas的实现,valueOffset 配合 unsafe 类对指定地址的内存数据进行修改,即修改value。
有参构造函数以及获取boolean值实现如下

 public AtomicBoolean(boolean initialValue) {
        value = initialValue ? 1 : 0;
    }

public final boolean get() {
        return value != 0;
    }

即通过value的1,0来表示false和true,默认的便为true

cas实现

 public final boolean getAndSet(boolean newValue) {
        boolean prev;
        do {
            prev = get();    //获取当前的状态true 或false 
        } while (!compareAndSet(prev, newValue)); //判断是否修改成功,成功则退出,否则一直循环到成功为止
        return prev;
    }

   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); // 如果 e 为 地址valueOffset 中的值的时候,修改地址offset中的值为 u,返回true,否则返回false
    }

相关文章

网友评论

      本文标题:AtomicBoolean类实现

      本文链接:https://www.haomeiwen.com/subject/hnamittx.html