首页 > 编程语言 >20230614 java.util.concurrent.atomic.AtomicInteger

20230614 java.util.concurrent.atomic.AtomicInteger

时间:2023-08-22 17:44:32浏览次数:37  
标签:java int 旧值 AtomicInteger util volatile 内存

介绍

  • java.util.concurrent.atomic.AtomicInteger
  • public class AtomicInteger extends Number implements java.io.Serializable

API

构造器

  • AtomicInteger()
  • AtomicInteger(int initialValue)
    • 设置初始值,默认是 0

public 方法

  • get , set

    • 原子操作
    • 不同步内存屏障,不能保证对其他线程的变化或者获取到的数值的可见性
  • lazySet

  • getAndSet

    • 以原子方式设置新值,并返回旧值
  • compareAndSet

    • boolean compareAndSet(int expectedValue, int newValue)
    • 如果当前值 等于 expectedValue ,则以原子方式将值设置为 newValue
    • 如果成功则为 true ,false 返回表示当前实际值不等于预期值

加减n并返回值:

  • getAndIncrement

  • getAndDecrement

    • 加减 1 , 返回旧值
  • getAndAdd

    • int getAndAdd(int delta)
    • 加减 n , 返回旧值
  • incrementAndGet

  • decrementAndGet

    • 加减 1 , 返回新值
  • addAndGet

    • 加减 n , 返回新值
  • getAndUpdate

  • updateAndGet

    • int getAndUpdate(IntUnaryOperator updateFunction)
    • 更新并返回值
  • getAndAccumulate

  • accumulateAndGet

    • 累积并返回值
    • int getAndAccumulate(int x, IntBinaryOperator accumulatorFunction)
    • accumulatorFunction.applyAsInt(prev, x)
  • getPlain , setPlain

    • 不是原子操作,不保证线程安全,性能更高
  • getOpaque , setOpaque

    • 使用 “volatile 读” 确保操作的内存可见性,但不会引起任何屏障操作
  • getAcquire

    • getAcquire() 方法使用 “volatile 读” 确保操作的内存可见性,并创建一个内存屏障
  • setRelease

    • setRelease() 方法使用 “volatile 写” 确保操作的内存可见性,并创建一个内存屏障
  • compareAndExchange

  • compareAndExchangeAcquire

  • compareAndExchangeRelease

    • int compareAndExchange(int expectedValue, int newValue)
    • 返回旧值
  • weakCompareAndSetPlain

  • weakCompareAndSetVolatile

  • weakCompareAndSetAcquire

  • weakCompareAndSetRelease

代码理解

内部是 volatile int 值,利用 Unsafe 进行 CAS 操作

private volatile int value;

标签:java,int,旧值,AtomicInteger,util,volatile,内存
From: https://www.cnblogs.com/huangwenjie/p/17649194.html

相关文章

  • 20230615 java.lang.invoke.VarHandle
    介绍java.lang.invoke.VarHandlepublicabstractclassVarHandleimplementsConstable在并发编程和底层内存访问上提供了一种更为灵活、安全和高效的方式APIget,set保证原子性getVolatile,setVolatile保证可见性getOpaque,setOpaque保证有序性op......
  • 20230615 java.lang.ThreadLocal
    介绍java.lang.ThreadLocalpublicclassThreadLocal线程局部变量APIstatic方法withInitial<S>ThreadLocal<S>withInitial(Supplier<?extendsS>supplier)创建一个线程局部变量,其初始值通过调用给定的supplier生成public方法get得到这个线程的当前值......
  • java应用接口自动化覆盖率统计实践
    一、背景Java应用接口自动化覆盖率统计的意义在于:确保测试覆盖率:通过自动化覆盖率统计,可以确保测试用例对应用程序的各个接口进行了全面的覆盖。这有助于发现潜在的代码错误、逻辑漏洞或者未处理的异常情况。提高代码质量:通过自动化覆盖率统计,可以发现代码中未被测试到的部......
  • java-sdk接口测试覆盖率统计实践
    一、背景接口覆盖率统计在JavaSDK开发中具有重要的意义。它衡量了代码中接口被测试用例覆盖的程度,即测试用例对接口的执行情况进行了多少次验证。接口覆盖率统计的意义包括:质量保证:接口覆盖率统计可以帮助开发团队评估测试的全面性和质量,确保代码的正确性和稳定性。高覆盖率......
  • Java中怎么进行原子操作?
    在Java中进行原子操作,特别是替换某个属性,你可以使用AtomicReference类来实现。AtomicReference可以保证对对象引用的原子更新操作。以下是一个示例,展示如何使用AtomicReference来进行原子替换操作:javaCopycodeimportjava.util.concurrent.atomic.AtomicReference;publ......
  • java实现大文件上传技术
    ​ 1,项目调研因为需要研究下断点上传的问题。找了很久终于找到一个比较好的项目。 在GoogleCode上面,代码弄下来超级不方便,还是配置hosts才好,把代码重新上传到了github上面。 https://github.com/freewebsys/java-large-file-uploader-demo 效果: 上传中,显示进度,时间......
  • 让Android Studo 不编译某个Java文件
    有时为了调试,让某些文件暂时不需编译,这样可以排除错误带来的无法运行情况,可以在build.gradle中加入:excludes=['com.coolweather.myble/AddrInterceptor.java'],如下compileOptions{sourceCompatibilityJavaVersion.VERSION_1_8targetCompatibilityJavaVers......
  • 15 JavaScript ES6中的箭头函数
    15JavaScriptES6中的箭头函数什么是箭头函数ES6中允许使用=>来定义函数。箭头函数相当于匿名函数,并简化了函数定义。基本语法//箭头函数letfn=(name)=>{//函数体return`Hello${name}!`;};//等同于letfn=function(name){//函数体......
  • Javascript关于对象的理解
    对象的概念  对象是一个包含数据和方法的集合。  下面,我们通过实例探索对象。首先,创建一个对象varperson={};  如果在控制台输入person,将会得到 [objectObject] 这时,我们就创建了一个空的对象,接着,我们需要向空对象中添加数据或方法varperson={name:[......
  • JAVA使用Protobuf GRPC
    IDEA安装Protobuf插件引入maven依赖<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.19.1</version></dependency>protobuf是目前比较新的版本,之前测试过程中使用3.9.1。发现生成的源代码......