美文网首页
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