java 原子变量_Java并发包中的原子变量操作类

原标题:Java并发包中的原子变量操作类

JUC并发包提供了一系列的原子操作类,这些类都是使用非阻塞算法(CAS)实现的,相比于使用锁来实现,这些原子操作类在性能上更好一些。

JUC并发包中包含有AtomicInteger、AtomicLong和AtomicBoolean等原子性操作类,它们的原理相似。

这里以AtomicLong为例进行说明,AtomicLong是原子性递增或者递减类,它是使用Unsafe来实现的。

AtomicLong通过CAS提供了非阻塞的原子性操作。

其源码如下:

c4935b30da1e8f95abe5dcf8a49cfcac.png

07a7a2e91b0e8bd24cfa15afd4b3b506.png

6e1e922e66e23489afe55aa14a6c20f4.png

5274e179809e47bf024bb0ca8a23417e.png

cd11b6a64d58a2f38f32d89c7c1bfbbe.png

从源码中看出,AtomicLong的递增或递减方法都是通过调用Unsafe的getAndAddLong方法来实现操作。

getAndAddLong方法是个原子性操作,在这里它的第一个参数是AtomicLong实例的引用,第二个参数是value变量在AtomicLong中的偏移量,第三个参数是要设置的第二个变量的值。

使用AtomicLong的实例代码见thread20

关于AtomicInteger和AtomicBoolean与AtomicLong原理类似,就不多说了。

代码示例:

abcb74a4ce67dcde6b3e2be3dad03821.png

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值