AtomicBoolean类实现

背景知识:

介绍:
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
    }



作者:plan454
链接:https://www.jianshu.com/p/c3c0304f9b02
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值