java 并发包的基石 原子变量和CAS

本文详细介绍了Java并发包中的原子变量AtomicInteger及其原理,包括基本用法、CAS操作以及ABA问题。AtomicInteger通过CAS实现无锁更新,提供了高效的并发计数解决方案,是Java并发编程的重要基石。
摘要由CSDN通过智能技术生成

16.1 原子变量和CAS

        什么是原子变量?为什么需要它们呢?我们从synchronized说起。 在15.2节,我们介绍过Counter类,使用synchronized关键字保证原子更 新操作,代码如下:
在这里插入图片描述

        对于count++这种操作来说,使用synchronized成本太高了,需要先获取锁,最后需要释放锁,获取不到锁的情况下需要等待,还会有线程的上下文切换,这些都需要成本。

        对于这种情况,完全可以使用原子变量代替,Java并发包中的基本 原子变量类型有以下几种。

        ·AtomicBoolean:原子Boolean类型,常用来在程序中表示一个标志位。

        ·AtomicInteger:原子Integer类型。

        ·AtomicLong:原子Long类型,常用来在程序中生成唯一序列号。

        ·AtomicReference:原子引用类型,用来以原子方式更新复杂类型。

        限于篇幅,我们主要介绍AtomicInteger。除了这4个类,还有一些 其他类,如针对数组类型的类AtomicLongArray、 AtomicReferenceArray,以及用于以原子方式更新对象中的字段的类, 如AtomicIntegerFieldUpdater、AtomicReferenceFieldUpdater等。Java 8增加了几个类,在高并发统计汇总的场景中更为适合,包括LongAdder、LongAccumulator、Double-Adder和DoubleAccumulator,具体可参见API 文档,我们就不介绍了。

16.1.1 AtomicInteger

        我们先介绍AtomicInteger的基本用法,然后介绍它的基本原理和逻辑,以及应用。

1.基本用法

        AtomicInteger有两个构造方法:

在这里插入图片描述

        第一个构造方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值