Java中的AtomicInteger

AtomicInteger是java1.5中java.util.concurrent.atomic下的一个类。

为什么要引入AtomicInteger

java中一般的运算符操作在多线程下是不安全的,例如i=1+1这个操纵在多线程的场景下是不安全的。假如一个线程计算完了1+1但是还并未对i进行赋值,此时另外一个线程来读取i的值,读取到的就是i之前的值,此时就出现了问题。虽然可以通过加锁的方式来避免这个问题但是加锁会极大的浪费性能,因此在java1.5引入了AtomicInteger解决这个问题。

AtomicInteger的引入解决了在不加锁的情况下也可以保证线程的安全

AtomicInteger的常用方法

addAndGet()- 以原子方式将给定值添加到当前值,并在添加后返回新值。
getAndAdd() - 以原子方式将给定值添加到当前值并返回旧值。
incrementAndGet()- 以原子方式将当前值递增1并在递增后返回新值。它相当于i ++操作。
getAndIncrement() - 以原子方式递增当前值并返回旧值。它相当于++ i 操作。
decrementAndGet()- 原子地将当前值减1并在减量后返回新值。它等同于i-- 操作。
getAndDecrement() - 以原子方式递减当前值并返回旧值。它相当于-- i 操作。

AtomicInteger的底层实现

AtmoicInteger在底层的实现是通过CAS(乐观锁)来进行实现的。

CAS乐观锁:认为每次取数据得时候都认为别的线程不会正在修改,所以不加锁,写数据的时候判断当前值与期望值是否相等,一样则更新,否则继续进行CAS操作。


                  
原文链接:https://blog.csdn.net/King_Treasure/article/details/128247042

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值