当前位置: 代码网 > it编程>编程语言>Java > Java实现AtomicIntegerArray 的几种常用方法

Java实现AtomicIntegerArray 的几种常用方法

2026年09月10日 Java 我要评论
1. atomicintegerarray 是什么?atomicintegerarray 就是:线程安全的 int[] 数组。普通数组:int[] array = new int[10];而原子数组:

1. atomicintegerarray 是什么?

atomicintegerarray 就是:

线程安全的 int[] 数组。

普通数组:

int[] array = new int[10];

而原子数组:

atomicintegerarray array = new atomicintegerarray(10);

区别在于:

int[]
 ↓
普通数组
 ↓
多个线程同时修改同一个元素时,不保证原子性
 
 
atomicintegerarray
 ↓
原子数组
 ↓
对元素的修改可以进行原子操作

2. 最基本的创建方式

方式一:指定长度

atomicintegerarray array = new atomicintegerarray(5);

相当于:

下标:  0   1   2   3   4
       ↓   ↓   ↓   ↓   ↓
      [0] [0] [0] [0] [0]

方式二:根据已有数组创建

int[] source = {10, 20, 30};

atomicintegerarray array =
        new atomicintegerarray(source);

此时:

index   0    1    2
        ↓    ↓    ↓
       10   20   30

3. 获取元素:get()

int value = array.get(0);

意思:

获取下标 0 的元素。

例如:

atomicintegerarray array =
        new atomicintegerarray(new int[]{10, 20, 30});

system.out.println(array.get(1));

输出

20

4. 修改元素:set()

array.set(0, 100);

意思:

把下标 0 的元素修改成 100。

例如:

原来:
[10, 20, 30]
array.set(0, 100)
变成:
[100, 20, 30]

5. 最重要的:incrementandget()

这个你刚才那个 incrementer 示例里面就用到了。

array.incrementandget(0);

意思:

把下标 0 的元素原子地 +1,然后返回新值。

例如:

atomicintegerarray array =
        new atomicintegerarray(new int[]{10, 20, 30});

int result = array.incrementandget(0);

执行:10 → 11

所以:result == 11

6.getandincrement()

这个和刚才一样,也特别容易搞混。

int result = array.getandincrement(0);

意思:

先返回旧值,再 +1。

例如:

原来:
10
 
getandincrement()
 
返回:
10
 
数组变成:
11

所以:

incrementandget()
    ↓
先 +1,再返回
 
 
getandincrement()
    ↓
先返回,再 +1

7.decrementandget()

同样:

array.decrementandget(0);

就是:

下标 0 的元素原子地 -1,并返回新值。

例如:

10 → 9

8.getanddecrement()

int result = array.getanddecrement(0);

就是:

原来:10
 
返回:10
 
然后:
10 → 9

所以和 increment 是完全一样的规律。

9.addandget()

这个也很常用。

array.addandget(0, 10);

意思:

把下标 0 的元素原子地加 10,并返回新值。

例如:

原来:
 
[100, 20, 30]
 
addandget(0, 10)
 

 
[110, 20, 30]

返回:110

10.getandadd()

int result = array.getandadd(0, 10);

意思:

先返回旧值,再加 10。

例如:

原来:100
 
返回:100
 
然后:
100 → 110

11. 为什么它比int[]安全?

这是你学习 atomicintegerarray 最重要的地方。

假设:

int[] array = {0};

两个线程同时:

array[0]++;

本质上还是:

读取
 ↓
+1
 ↓
写回

所以可能出现:

线程a读取 0
线程b读取 0
 
线程a写入 1
线程b写入 1
 
最终 = 1

而:

atomicintegerarray array =
        new atomicintegerarray(1);

两个线程执行:

array.incrementandget(0);

底层会使用类似 cas 的原子更新机制。

因此:

线程a:0 → 1
线程b:发现0已经变成1
       ↓
       重新尝试
       ↓
       1 → 2

最终:2

12. 你现在把它和 atomicinteger 放一起理解

这个非常重要:

atomicinteger
    ↓
原子地操作一个 int
 
 
atomicintegerarray
    ↓
原子地操作 int[] 中的某个元素

例如:

atomicinteger count = new atomicinteger(0);

count.incrementandget();

相当于:

atomicintegerarray array =
        new atomicintegerarray(10);

array.incrementandget(3);

前者操作的是:一个 int

后者操作的是:数组下标 3 的 int

你把 atomicintegerarray 理解成“atomicinteger 的数组版”,基本就对了。

到此这篇关于java实现atomicintegerarray 的几种常用方法的文章就介绍到这了,更多相关java atomicintegerarray 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com