AtomicBoolean源码解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013229916/article/details/82987601

1.原子类

      java.util.concurrent.atomic包下有很多原子类,这些原子类扩展了volatile的概念,使用这些原子类我们可以对变量进行原子的更新。

2.AtomicBoolean

compareAndSet方法使用Unsafe类的compareAndSwapInt进行变量的更新,这个类的方法基本都是native方法,由C++操作底层硬件进行变量的更新(原子方式)。compareAndSwapInt第一个参数为对象实例,第二个参数为要修改变量的地址空间的offset,第三个参数为期望的变量的值,第四个参数为更新后的变量值。

getAndSet对value域进行原子更新,首先获取value的原值,使用compareAndSet进行更新操作,当prev因为竞争在更新的过程中被修改了,方法会返回false,导致do while一直执行,直到prev的值符合预期(在本次设置过程中没有被修改为其他值),原子方式更新成功。

lazySet方法会将value的值最终设置为newValue,可以看到unsafe类使用的更新方法中没有期望值这个参数。putOrderedInt的作用为禁止指令重排,关于指令重排的介绍参照https://www.cnblogs.com/chenyangyao/p/5269622.html。

猜你喜欢

转载自blog.csdn.net/u013229916/article/details/82987601
今日推荐