当前位置: 首页 > 工具软件 > AtomCI > 使用案例 >

Atomic原子类及底层原理

向泽语
2023-12-01

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:原子更新引用类型字段的更新器

 类似资料: