AtomicInteger使用详解

news2024/11/27 5:27:03

AtomicInteger使用详解

  • 1、get():获取当前AtomicInteger对象的值。
  • 2、set(int newValue):将AtomicInteger对象的值设置为指定的newValue。
  • 3、getAndSet(int newValue):先获取当前AtomicInteger对象的值,然后将对象的值设置为指定的newValue。
  • 4、compareAndSet(int expect, int update):比较当前对象的值与expect是否相等,如果相等,则将对象的值设置为update。
  • 5、getAndIncrement():获取当前AtomicInteger对象的值,并将对象的值加1。
  • 6、getAndDecrement():获取当前AtomicInteger对象的值,并将对象的值减1。
  • 7、incrementAndGet():将当前AtomicInteger对象的值加1,并返回增加后的值。
  • 8、decrementAndGet():将当前AtomicInteger对象的值减1,并返回减少后的值。
  • 9、addAndGet(int delta):将指定的delta值加到当前AtomicInteger对象的值上,并返回增加后的值。
  • 10、getAndAdd(int delta):获取当前AtomicInteger对象的值,并将指定的delta值加到对象的值上。

AtomicInteger是Java中提供的一种线程安全的原子操作类,用于在多线程环境下对整数进行原子操作。常用的方法如下:
atomicInteger

1、get():获取当前AtomicInteger对象的值。

AtomicInteger的get()方法用于获取当前值。

以下是一个示例代码,演示了如何使用AtomicInteger的get()方法:

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicIntegerDemo {
    public static void main(String[] args) {
        AtomicInteger counter = new AtomicInteger(0);
        // 获取当前值
        int currentValue = counter.get();
        System.out.println("Current value: " + currentValue);
    }
}

在上面的示例中,我们创建了一个AtomicInteger对象counter,并将其初始化为0。然后,我们使用get()方法获取当前值,并将其打印出来。

2、set(int newValue):将AtomicInteger对象的值设置为指定的newValue。

AtomicInteger的set(int newValue)方法用于将AtomicInteger对象的值设置为指定的新值newValue。
以下是一个示例代码,演示了如何使用AtomicInteger的set()方法:

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicIntegerDemo {
    public static void main(String[] args) {
        AtomicInteger counter = new AtomicInteger(0);
        // 设置新值
        counter.set(10);
        System.out.println("New value: " + counter.get());
    }
}

在上面的示例中,我们创建了一个AtomicInteger对象counter,并将其初始化为0。然后,我们使用set()方法将其值设置为10,并使用get()方法获取新的值,并将其打印出来。

3、getAndSet(int newValue):先获取当前AtomicInteger对象的值,然后将对象的值设置为指定的newValue。

AtomicInteger的getAndSet(int newValue)方法用于获取当前AtomicInteger对象的值并设置为指定的新值newValue。它是一个原子操作,确保在多线程环境下的原子性和线程安全。

以下是一个示例代码,演示了如何使用AtomicInteger的getAndSet()方法:

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicIntegerDemo {
    public static void main(String[] args) {
        AtomicInteger counter = new AtomicInteger(0);
        // 获取当前值并设置新值
        int oldValue = counter.getAndSet(10);
        System.out.println("Old value: " + oldValue);
        System.out.println("New value: " + counter.get());
    }
}

在上面的示例中,我们创建了一个AtomicInteger对象counter,并将其初始化为0。然后,我们使用getAndSet()方法获取当前的值,并将其设置为10。getAndSet()方法返回的是旧的值,我们将其打印出来。然后,我们使用get()方法获取新的值,并将其打印出来。

4、compareAndSet(int expect, int update):比较当前对象的值与expect是否相等,如果相等,则将对象的值设置为update。

AtomicInteger的compareAndSet(int expect, int update)方法是一个原子操作,用于比较当前AtomicInteger对象的值是否与期望值expect相等,如果相等,则将其值设置为update。如果不相等,不会进行更新操作。

以下是一个示例代码,演示了如何使用AtomicInteger的compareAndSet()方法:

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicIntegerDemo {
    public static void main(String[] args) {
        AtomicInteger counter = new AtomicInteger(0);
        // 比较并设置新值
        boolean success = counter.compareAndSet(0, 10);
        System.out.println("Operation success: " + success);
        System.out.println("New value: " + counter.get());
    }
}

在上面的示例中,我们创建了一个AtomicInteger对象counter,并将其初始化为0。然后,我们使用compareAndSet()方法比较当前的值是否为期望值0,并将其设置为新值10。compareAndSet()方法返回一个布尔值,表示操作是否成功。我们将其打印出来。然后,我们使用get()方法获取新的值,并将其打印出来。

5、getAndIncrement():获取当前AtomicInteger对象的值,并将对象的值加1。

AtomicInteger的getAndIncrement方法是一个原子操作,用于获取当前AtomicInteger对象的值,并将其递增1。返回的是递增前的值。

以下是一个示例代码,演示了如何使用AtomicInteger的getAndIncrement方法:

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicIntegerDemo {
    public static void main(String[] args) {
        AtomicInteger counter = new AtomicInteger(0);
        // 获取当前值并递增
        int value = counter.getAndIncrement();
        System.out.println("Old value: " + value);
        System.out.println("New value: " + counter.get());
    }
}

在上面的示例中,我们创建了一个AtomicInteger对象counter,并将其初始化为0。然后,我们使用getAndIncrement()方法获取当前的值,并将其递增1。getAndIncrement()方法返回的是递增前的值,我们将其打印出来。然后,我们使用get()方法获取新的值,并将其打印出来。

6、getAndDecrement():获取当前AtomicInteger对象的值,并将对象的值减1。

AtomicInteger的getAndDecrement方法是一个原子操作,用于获取当前AtomicInteger对象的值,并将其递减1。返回的是递减前的值。

以下是一个示例代码,演示了如何使用AtomicInteger的getAndDecrement方法:

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicIntegerDemo {
    public static void main(String[] args) {
        AtomicInteger counter = new AtomicInteger(5);
        // 获取当前值并递减
        int value = counter.getAndDecrement();
        System.out.println("Old value: " + value);
        System.out.println("New value: " + counter.get());
    }
}

在上面的示例中,我们创建了一个AtomicInteger对象counter,并将其初始化为5。然后,我们使用getAndDecrement()方法获取当前的值,并将其递减1。getAndDecrement()方法返回的是递减前的值,我们将其打印出来。然后,我们使用get()方法获取新的值,并将其打印出来。

7、incrementAndGet():将当前AtomicInteger对象的值加1,并返回增加后的值。

AtomicInteger的incrementAndGet方法是一个原子操作,用于将AtomicInteger对象的值递增1,并返回递增后的值。

以下是一个示例代码,演示了如何使用AtomicInteger的incrementAndGet方法:

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicIntegerDemo {
    public static void main(String[] args) {
        AtomicInteger counter = new AtomicInteger(5);
        // 递增并获取新值
        int value = counter.incrementAndGet();
        System.out.println("New value: " + value);
    }
}

在上面的示例中,我们创建了一个AtomicInteger对象counter,并将其初始化为5。然后,我们使用incrementAndGet()方法将其值递增1,并将递增后的值存储在变量value中。最后,我们将新的值打印出来。

8、decrementAndGet():将当前AtomicInteger对象的值减1,并返回减少后的值。

AtomicInteger的decrementAndGet方法是一个原子操作,用于将AtomicInteger对象的值递减1,并返回递减后的值。

以下是一个示例代码,演示了如何使用AtomicInteger的decrementAndGet方法:

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicIntegerDemo {
    public static void main(String[] args) {
        AtomicInteger counter = new AtomicInteger(5);
        // 递减并获取新值
        int value = counter.decrementAndGet();
        System.out.println("New value: " + value);
    }
}

在上面的示例中,我们创建了一个AtomicInteger对象counter,并将其初始化为5。然后,我们使用decrementAndGet()方法将其值递减1,并将递减后的值存储在变量value中。最后,我们将新的值打印出来。

9、addAndGet(int delta):将指定的delta值加到当前AtomicInteger对象的值上,并返回增加后的值。

AtomicInteger的addAndGet方法是一个原子操作,用于将AtomicInteger对象的值加上指定的增量,并返回加上增量后的值。

以下是一个示例代码,演示了如何使用AtomicInteger的addAndGet方法:

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicIntegerDemo {
    public static void main(String[] args) {
        AtomicInteger counter = new AtomicInteger(5);
        // 增加指定的增量并获取新值
        int value = counter.addAndGet(3);
        System.out.println("New value: " + value);
    }
}

在上面的示例中,我们创建了一个AtomicInteger对象counter,并将其初始化为5。然后,我们使用addAndGet()方法将其值增加3,并将增加后的值存储在变量value中。最后,我们将新的值打印出来。

10、getAndAdd(int delta):获取当前AtomicInteger对象的值,并将指定的delta值加到对象的值上。

AtomicInteger的getAndAdd方法是一个原子操作,用于获取AtomicInteger对象的当前值,并将指定的增量添加到该值上。

以下是一个示例代码,演示了如何使用AtomicInteger的getAndAdd方法:

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicIntegerDemo {
    public static void main(String[] args) {
        AtomicInteger counter = new AtomicInteger(5);
        // 获取当前值并增加指定的增量
        int value = counter.getAndAdd(3);
        System.out.println("Previous value: " + value);
        System.out.println("New value: " + counter.get());
    }
}

在上面的示例中,我们创建了一个AtomicInteger对象counter,并将其初始化为5。然后,我们使用getAndAdd()方法获取当前值并将其增加3,并将获取的旧值存储在变量value中。最后,我们将旧值和新的增加后的值打印出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/722234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROS1/2机器人课程的价值和规模

价值用价格,规模用销量。 免费的ROS1/2课程也很多。 2023版,15元,24人。 2022版,1.99元,21人。 价格不贵,人数很少,店家也很少。 当然,有朋友说,有免费冲击&#xff0…

宏晶微 音频处理芯片 MS7124

MS7124是一款高性能24bit数字立体声音频DAC,该DAC采用Sigma-Delta结构,支持标准的I2S数字信号输入,输出支持立体声和单声道。

比对Excel数据

以a个为准绳比对b表数据,添加比对结果列输出。 (本笔记适合初通 Python 的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么…

大数据Doris(五十七):RECOVER数据删除恢复

文章目录 RECOVER数据删除恢复 一、Recover语法 二、数据恢复案例 RECOVER数据删除恢复 Doris为了避免误操作造成的灾难,支持对误删除的数据库/表/分区进行数据恢复,在drop table或者 drop database之后,Doris不会立刻对数据进行物理删除…

C语言进阶--文件操作

目录 一.何为文件 二.文件名 三.文件的打开和关闭 3.1.流 3.2.文件指针 3.3.文件的打开与关闭 打开文件: 模式: 关闭文件: 四.文件的顺序读写 4.1.常见的顺序读写函数 4.2.字符的输入输出fgetc/fputc 输出函数: 输入…

计算机存储层次及常用存储简介

计算机存储层次(Memory hierarchy) 存储层次是在计算机体系结构下存储系统层次结构的排列顺序。 每一层于下一层相比 都拥有 较高的速度 和 较低延迟性 ,以及 较小的容量 (也有少量例外,如AMD早期的Duron CPU&#xf…

pod 控制器 3

简单回顾 之前我们学习过的的 docker ,例如我们运行 docker run busybox echo "hello wrold" 他的实际内在逻辑是这个样子的 程序将指令推送给 dockerdocker 会检查本地是否有 busybox 镜像,若没有则去 docker hub 上面拉取镜像,…

windows下mysql配置文件my.ini在这个位置

windows下mysql配置文件my.ini在这个位置 选中服务邮件 右键----属性,弹出下图 一般默认路径: "D:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --defaults-file"C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" MySQ…

信息安全管理与评估赛题第4套

全国职业院校技能大赛 高等职业教育组 信息安全管理与评估 赛题四 模块一 网络

simulink 常用模块

add sub pro div加减乘除 Relational Operator 数值比较模块 < < > > ! Compare To Constant 直接和某数字比较&#xff0c;是上面的封装 Logical Operator 逻辑运算 & | ~ switch 相当于c语言的if 中间是条件&#xff0c;满足走上&#xff0c;否则走下…

上门按摩小程序开发|同城预约上门小程序定制

上门按摩小程序对实体按摩商家来说是非常适合的。下面是对上门按摩小程序适合实体按摩商家开发的简单介绍&#xff1a;   扩展服务范围&#xff1a;上门按摩小程序可以让实体按摩商家将服务范围扩展到用户的家中或办公场所。用户可以通过小程序预约上门按摩服务&#xff0c;无…

【openGauss数据库】--运维指南03--数据导出

【openGauss数据库】--运维指南03--数据导出 &#x1f53b; 一、openGauss导出数据&#x1f530; 1.1 概述&#x1f530; 1.2 导出单个数据库&#x1f537; 1.2.1 导出数据库&#x1f537; 1.2.2 导出模式&#x1f537; 1.2.3 导出表 &#x1f530; 1.3 导出所有数据库&#x1…

计算两个二维数组arr1和arr2中对应位置元素的商

代码实现 &#xff1a;一个嵌套循环&#xff0c;用于计算两个二维数组arr1和arr2中对应位置元素的商&#xff0c;并将结果存储在result数组中。首先&#xff0c;定义了一个空数组result用于存储结果。然后&#xff0c;通过两个for循环遍历arr1数组的每一行和每一列。在内层循环…

[SWPUCTF 2021 新生赛] ez_unserialize

打开链接但是没有题目 使用御剑扫一下 flag.php打不开&#xff0c;但是在robots.txt里面我们找到了一个路径 /cl45s.php 打开之后是PHP源码 简单审一下,构造pop链&#xff1a; 链尾&#xff08;就是最终我们想要利用的地方&#xff09;&#xff0c;在echo $flag 并且include了…

基于改进莱维飞行和混沌映射的粒子群算法(10种混沌映射随意切换),附matlab代码

“ 本篇文章对粒子群优化算法进行改进&#xff0c;首先通过引入混沌映射机制&#xff0c;对其群体进行初始化&#xff0c;增加粒子群个体的多样性&#xff1b;然后在粒子群个体的位置更新公式上引入改进的莱维飞行机制&#xff0c;提高搜索精度&#xff0c;帮助粒子群个体跳出局…

云原生(第三篇)-k8s资源管理的两种方式

陈述式资源管理方法&#xff1a; 1.kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口 2.kubectl 是官方的CLI命令行工具&#xff0c;用于与 apiserver 进行通信&#xff0c;将用户在命令行输入的命令&#xff0c;组织并转化为 apiserver 能识别的…

四十一、动态规划——树形DP、记忆化搜索例题题解

算法主要内容 一、树形DP1、题目内容2、状态划分&#xff08;1&#xff09;存储&#xff08;2&#xff09;状态集合划分 3、题解 二、记忆化搜索1、题目内容2、状态划分&#xff08;1&#xff09;状态编号&#xff08;2&#xff09;状态划分 3、题解 一、树形DP 1、题目内容 2…

瑞芯微:基于RKNN3568得ufldv2部署

Lane检测是自动驾驶和高级驾驶员辅助系统&#xff08;ADAS&#xff09;的基本组成部分&#xff0c;用于区分和定位道路上的车道线。尽管深度学习模型已经取得了巨大成功&#xff0c;但仍有一些重要且具有挑战性的问题需要解决。 第一个问题是效率问题。在实践中&#xff0c;车…

猜猜看!哪张甜甜圈图是真的?AI数字人商业实践「真经」;LangChain X Prem挑战赛;故事绘本生成与盈利平台 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 猜猜看&#xff01;你觉得&#xff0c;哪张甜甜圈的图片是真的&#xff1f; 这是 Reddit网站 Midjourney 子区发起的一项趣味挑战&…

【计算机视觉】对比学习采样器sampler

前置知识准备 Samplers — Open Metric Learning documentation​​​​​​ 在该文档里&#xff0c;category表示类别&#xff0c;label表示商品&#xff0c;instance表示商品不同角度的图片。 category就是blouses_shirts&#xff1b;label就是15&#xff1b;instance就是这…