AtomicBoolean源码解析

本文深入探讨了Java并发包中的AtomicBoolean类,分析了其如何利用Unsafe类的compareAndSwapInt方法实现原子更新,并详细解释了getAndSet、lazySet方法的工作原理,确保在多线程环境下对变量的更新操作是原子性的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值