Java并发包-atomic包-让您彻底掌握AtomicIntegerArray源码

本文详细探讨了Java并发包中的AtomicIntegerArray,通过实例展示了其在多线程环境下的原子操作特性。文章深入解析了AtomicIntegerArray的源码,包括重要成员变量base、scale和shift的作用,以及如何确保元素的线程安全性。此外,还对比了AtomicIntegerArray与普通数组的区别,强调了其对数组元素的原子操作而非整个数组的原子性。
摘要由CSDN通过智能技术生成

本篇文章的主要内容如下:

1:AtomicIntegerArray实例
2:AtomicIntegerArray的源码解析
3:AtomicInLongArray
1、AtomicIntegerArray实例
接下来的例子是定义一个普通的整型数组和一个AtomicIntegerArray在多线程下添加元素,看看会出现什么效果。

public class AtomicIntegerArrayTest {
private static int[] intArr = new int[5];
private static AtomicIntegerArray aiArr = new AtomicIntegerArray(5);
private static ThreadPoolExecutor pool;
static {
pool = new ThreadPoolExecutor(5, 10, 1, TimeUnit.SECONDS, new ArrayBlockingQueue<>(1000));
}
public static void main(String[] args) throws InterruptedException {
intArrTest();
aiArrTest();
pool.awaitTermination(3, TimeUnit.SECONDS);
System.out.println(“AtomicInteger=” + aiArr);
StringBuilder sb = new StringBuilder(“整形数组=[”);
for(int i=0;i<intArr.length;i++){
sb.append(intArr[i]).append(" “);
}
sb.append(”]");
System.out.println(sb.toString());
pool.shutdown();
}
//普通整型数组多线程下添加元素
public static void intArrTest() {
for (int i = 0; i < 5; i++) {
pool.execute(() -> {
for (int j = 0; j < 10000; j++) {
intArr[j % 5]++;
}
});
}
}
//AtomicIntegerArray多线程下添加元素
public static void aiArrTest() {
for (int i = 0; i < 5; i++) {
pool.execute(() -> {
for (int j = 0; j < 10000; j++) {
aiArr.getAndIncrement(j % 5);
}
});
}
}
}
运行结果如下:

Java并发包-atomic包-让您彻底掌握AtomicIntegerArray源码
Java并发包-atomic包-让您彻底掌握AtomicIntegerArray源码
通过上面的运行结果可以看出,普通的int[]数组每一次运行结果都是不同的,而AtomicIntegerArray无论运行多少次,运行结果都是一样且正确的。所以大家是不是明白了AtomicIntegerArray是保证数组中元素的原子操作,而不是数组本身的原子操作。

2、AtomicIntegerArray的源码解析
首先

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值