JUC并发编程之AtomicInteger使用

在Java基础中我们知道,普通的int类型或者Integer类型在进行++或者其他计数操作的时候,在编译后的字节码文件会先获取i1的值保存到程序技术栈,然后将程序技术栈的值保存到局部变量当中,然后再进行自增操作,这过程并不是一个线程安全的,所以我们就会使用一个线程安全的原子类AtomicInteger;

官方翻译得知它是一个原子递增的类 

查看构造方法 

可以知道构造方法中的值会被当当做初始值可以理解为 int i = 1

 这里我们编写了一个修改的方法 IntUnaryOperator它是一个函数式接口而applyAsInt是获取参数传递过来的结果值,

i.get() 获取预期的值

applyAsInt得到需修改后的值,然后进行cas操作,我们在这里写了一个while(true)循环,如果没有循环那么if判断只会执行一次

全部代码图,value -> value * 5 为将i的值 * 5然后返回结果

正常执行结果图

 可以看到我们查询正常执行,下面模拟异常执行

在获取i的值后停住,然后人工修改i的值 

 

 往下执行

可以看到if块不成立,因为我们修改后i的值为3,而预期的值为5,那么此次修改就不能成功,只能等待下一次if判断条件

 

 可以看到我们的最终结果是15 -> 3 * 5;

以上就是原理累加器的基本使用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TheJing腥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值