Java 中的 AtomicIntegerArray set() 方法及示例

2025 年 1 月 7 日 | 阅读 3 分钟

Java 中的 Java.util.concurrent.atomic.AtomicIntegerArray.set() 是一个内置函数,它允许您在 AtomicIntegerArray 的任何位置设置一个值。该函数通过将 AtomicIntegerArray 的索引值作为参数来修改指定索引处的值。该方法不返回任何值。与 getAndSet() 类似,set() 函数在设置新值之前会返回指定索引处的值。相比之下,前者函数根本不返回任何结果。

语法

参数:该函数接受两个参数

i - 要更新的索引值。

newValue - 要应用于该索引的更新值。

返回值:该函数不返回任何值。

示例 1

提供的 Java 代码展示了如何使用 AtomicIntegerArray,一个线程安全的整数数组。首先,创建了一个名为 arr 的初始整数数组。然后使用此数组初始化 intArray 中的 AtomicIntegerArray。代码将 AtomicIntegerArray 的初始值打印到控制台。接下来,它使用 AtomicIntegerArray 的 set 函数将索引 7 的值更新为 100。最后打印更新后的数组以显示更改。此示例演示了如何在并发环境中安全地修改 AtomicIntegerArray 的单个元素。

实施

文件名: SetIntegerExample1.java

输出

 
The array is given by : [10, 20, 30, 40, 50, 60, 70, 80, 90]
The array after the update is given by : [10, 20, 30, 40, 50, 60, 70, 100, 90]   

示例 2

提供的 Java 代码演示了如何使用 AtomicIntegerArray 对整数数组执行线程安全的操作。通过用特定值初始化整数数组 arr,可以从该数组创建名为 atintArray 的 AtomicIntegerArray。尽管代码试图输出原始 AtomicIntegerArray,但它将显示对象的内存地址,而不是值。然后,它尝试使用 set 方法将索引 9 的值更改为 100。但是,由于数组只有 9 个元素(索引 0 到 8),这将抛出 IndexOutOfBoundsException。

实施

文件名: SetIntegerExample2.java

输出

 
The array is given by : [10, 20, 30, 40, 50, 60, 70, 80, 90]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 9 out of bounds for length 9
at java.base/jdk.internal.util.Preconditions$2.apply(Preconditions.java:63)
at java.base/jdk.internal.util.Preconditions$2.apply(Preconditions.java:60)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
	at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)
at java.base/java.lang.invoke.VarHandleInts$Array.setVolatile(VarHandleInts.java:776)
at java.base/java.util.concurrent.atomic.AtomicIntegerArray.set(AtomicIntegerArray.java:106)
at SetIntegerExample1.main(SetIntegerExample1.java:19)