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

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

Java 中一个内置的方法,允许你在 AtomicLongArray 的任何位置设置一个值,该方法称为 Java.util.concurrent.atomic.AtomicLongArray.set()。此函数接受 AtomicLongArray 的索引值作为参数,并修改该索引处的值。此方法绝对不返回任何内容。set() 和 getAndSet() 函数是相似的。但是,后者在将新值设置到指定索引处之前会返回该索引处的值,而前者则不返回任何值。

语法

参数

该函数需要两个参数

i - 要更新的索引值。

newValue - 要添加到索引处的更新值。

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

示例 1

代码展示了如何使用 Java 的 AtomicLongArray。初始化后,从 long 整数数组创建一个名为 AtLongarr 的 AtomicLongArray。打印此原子数组的初始内容。然后,代码使用 set 函数将指定索引(在此情况下为索引 5)处的值更新为新值(12)。最后打印修改后的 AtomicLongArray,显示数组的修改。由于它保证了数组元素的线程安全操作,因此 AtomicLongArray 在并发编程场景中非常有用。

实施

文件名:SetAtomicExample1.java

输出

 
The array given is : [1, 3, 5, 7, 9, 11, 13, 15]
The array after update given is : [1, 3, 5, 7, 9, 12, 13, 15]   

示例 2

Java 代码展示了如何创建和编辑 AtomicLongArray。首先,使用定义的标准 long 整数数组初始化一个名为 AtLongarr 的 AtomicLongArray。打印此原子数组的初始内容。接下来,使用 set 方法尝试将索引 9 处的值更新为 100。但是,由于数组只有 8 个元素,因此索引 9 是非法的,这会引发 IndexOutOfBoundsException。尽管最初的目的是演示数组元素的线程安全操作,但错误的索引强调了在并发编程中确保使用适当索引的重要性。

实施

文件名:SetAtomicExample2.java

输出

 
The array given is : [1, 3, 5, 7, 9, 11, 13, 15]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 9 out of bounds for length 8
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.VarHandleLongs$Array.setVolatile(VarHandleLongs.java:776)
at java.base/java.util.concurrent.atomic.AtomicLongArray.set(AtomicLongArray.java:106)
	at SetAtomicExample1.main(SetAtomicExample1.java:18)