首页 > 编程语言 >并发编程之AtomicInteger,AtomicLong,LongAdder

并发编程之AtomicInteger,AtomicLong,LongAdder

时间:2024-04-10 21:33:52浏览次数:26  
标签:LongAdder atomicInteger 原子 并发 计数器 AtomicInteger AtomicLong

系列文章目录


文章目录


前言

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
在这里插入图片描述


AtomicInteger类是系统底层保护的int类型,通过提供执行方法的控制进行值的原子操作。

AtomicInteger它不能当作Integer来使用。AtomicInteger与使用同步执行相同操作相比,使用它同样更快,更易读。

在 JDK1.5 中新增了并发情况下使用的 Integer/Long 所对应的原子类AtomicInteger 和 AtomicLong。

在并发的场景下,如果我们需要实现计数器,可以利用AtomicInteger和AtomicLong,这样一来,就可以避免加锁和复杂的代码逻辑,有了它们之后,我们只需要执行对应的封装好的方法,例如对这两个变量进行原子的增操作或原子的减操作。

AtomicInteger通过调用构造函数可以直接创建。在AtomicInteger提供了两种方法来获取和设置它的实例的值。

在现实生活中,我们需要AtomicInteger两种情况:

1、作为多个线程同时使用的原子计数器。

2、在比较和交换操作中实现非阻塞算法。

AtomicInteger作为原子计数器

@Test
public void AtomicIntegerTest1(){
   
    //初始值是 0
    AtomicInteger atomicInteger = new AtomicInteger(100);
    // 以原子方式将给定值添加到当前值,并在添加后返回新值。
    System.out.println(atomicInteger.addAndGet(2));    //102
    System.out.println(atomicInteger);                      //102
 
    // 以原子方式将给定值添加到当前值并返回旧值。
    

标签:LongAdder,atomicInteger,原子,并发,计数器,AtomicInteger,AtomicLong
From: https://blog.csdn.net/pleaseprintf/article/details/137524652

相关文章

  • 面试题:AtomicInteger底层是如何实现的?
    有过Java面试经验的同学,可能很多都被问过这样一个问题:说一说AtomicInteger底层是如何实现的。废话不多说,源码先贴出来:publicfinalintgetAndAddInt(Objectvar1,longvar2,intvar4){intvar5;do{var5=this.getIntVolatile(var1,var2);}whil......
  • 为什么阿里不推荐使用 AtomicLong?
    作者:伴川来源:blog.csdn.net/kologin/article/details/135126371前言在分布式系统中,计数器是一个常见的需求。为了实现高并发、高可用的计数器,我们需要选择一个合适的实现方式。在Java中,有两种常见的计数器实现方式:AtomicLong和LongAdder。最近,阿里巴巴在一份技术报告中......
  • Java8 原子类 AtomicInteger 源码阅读
    AtomicInteger 是用 CAS(Compre And Swap,乐观锁)构造的一个 原子类。1. CAS CAS(CompareandSwap)比较并替换,CAS是实现乐观锁的一个重要操作。CAS是一个硬件指令,保证是原子操作,Java中通过UnSafe来实现。详细可一下我的这篇博文:传送。CAS 的基本步骤:执行函数CAS(V,E,N......
  • LongAdder为什么在高并发下保持良好性能?LongAdder源码详细分析
    文章目录一、LongAdder概述1、为什么用LongAdder2、LongAdder使用3、LongAdder继承关系图4、总述:LongAdder为什么这么快5、基本原理二、Striped64源码分析1、Striped64重要概念2、Striped64常用变量或方法3、静态代码块初始化UNSAFE4、casBase方法5、casCellsBusy方法6、getProbe......
  • AtomicInteger源码解读和Unsafe对象
    针对线程安全问题,jdk除提供了加锁的解决方式外还提供了无锁的方式,例如AtomicInteger这个原子整数类,无锁并发的线程安全是通过cas来实现的,这一篇文章就来简单分析下AtomicInteger的源码实现。一、AtomicInteger的简答使用先来看一断非线程安全的代码@Slf4jpublicclassThre......
  • AtomicInteger类代码内部逻辑
    AtomicInteger是什么一个可以原子更新的int值。有关原子变量属性的描述,请参阅java.util.concurrent.atomic包规范。AtomicInteger用于原子递增计数器等应用程序,不能用作Integer的替代品。但是,这个类确实扩展了Number,以允许处理基于数字的类的工具和实用程序进行统一访问。设......
  • LongAdder高竞争环境下为什么比AtomicLong块
     LongAdderlongAdder=newLongAdder();longAdder.increment();//依次开始分析 LongAdder的基本思路是分散热点,将value值分散到一个Cell数组中。第一部分:LongAdder.add()   第二部分:Striped64.longAccumulateif((cs=cells)!=null||!casBase(b=base,......
  • AtomicInteger详解
    AtomicInteger定义AtomicInteger类是系统底层保护的int类型,通过对int类型的数据进行封装,提供执行方法的控制进行值的原子操作,但AtomicInteger≠Integer。AtomicInteger是一个提供原子操作的Integer类,通过线程安全的方式操作加减。AtomicInteger使用场景AtomicInteger提供原子操作......
  • 20230614 java.util.concurrent.atomic.AtomicInteger
    介绍java.util.concurrent.atomic.AtomicIntegerpublicclassAtomicIntegerextendsNumberimplementsjava.io.SerializableAPI构造器AtomicInteger()AtomicInteger(intinitialValue)设置初始值,默认是0public方法get,set原子操作不同步内存屏障,不能......
  • AtomicInteger
    众所周知,AtomicInteger用于多线程下线程安全的数据读写操作,避免使用锁同步,底层采用CAS实现,内部的存储值使用volatile修饰,因此多线程之间是修改可见的。1.构造publicAutomicInteger(intinitValue):有参构造,初始化为initValuepublicAutomicInteger():无参构造,相当于Automic......