Atomic原子类及底层原理

Atomic简介

在多线程同时操作一个变量的时候,类似++这种方式,用锁就显得大材小用了,所以用到了atomic原子类,可以保证在多线程的情况下,安全高性能的执行程序更新变量,atomic原子类的底层不是传统意义上的锁机制,而是无锁化的cas机制,CAS 全称compare and set 比较后再设置

简单理解就是多线程操作的情况下先获取一个值,看谁先发起cas操作,判断时候和获取的时候值一样 如果一样就修改值,如果不一样就重新获取再进行修改
jdk1.8之前内就是通过cas机制不断地循环判断,这样在并发量高的情况下很容易造成资源和性能的浪费,所以在1.8之后对atomci原子类进行了优化加入了分段锁的概念

在LongAdder底层实现过程中,有个base值,当并发量提升之后就会分段实施cas操作,把基数分不到多个段中,这样就降低了更新同一个数值时的cas操作,当一段cas操作失败之后就会去其他段进行操作,如果获取总值就把剩下的加起来

atomic原子类包含
基本类型:使用原子的方式更新基本类型

a. AtomicInteger整形原子类   b. AtomicLong长整型原子类   c. AtomicBoolean布尔原子类

数组类型:使用原子的方式更新数组中某个元素

a. AtomicIntegerArray:整形数组原子类   b. AtomicLongArray:长整形数组原子类   c.
AtomicReferenceArray:引用类型数组原子类(即对应数组中存放的元素为对象形式)

引用类型:使用原子的方式更新某个对象

a. AtomicReference:引用类型原子类   b.
AtomicStampedReference:AtomicReference的扩展版,增加了一个参数stamp标记,这里是为了解决了AtomicInteger和AtomicLong的操作会出现ABA问题。
  c. AtomicMarkableReference
:与AtomicStampedReference差不多,只不过第二个参数不是用的int作为标志,而用boolean类型做标记,具体用法看后面讲解。

对象的属性修改类型:使用原子的方式更新某个类中某个字段

a. AtomicIntegerFieldUpdater:原子更新整形字段的更新器   b.
AtomicLongFieldUpdater:原子更新长整形字段的更新器   c.
AtomicReferenceFieldUpdater:原子更新引用类型字段的更新器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值