Java并发编程专题(十一)----(JUC原子类)数组类型详解
1. 前言
Java并发编程主要使用锁、volatile和原子操作三种方式来保证线程安全。而在这三种方式中,原子操作是性能最优秀、最方便的一种。而在原子操作中,JUC原子类是最常用的一种。
本篇文章将主要讨论JUC原子类中的数组类型,即AtomicIntegerArray
、AtomicLongArray
、AtomicReferenceArray
。通过介绍这些类的特性和使用方法,让读者更好地理解和掌握Java中的原子操作。
2. AtomicIntegerArray
AtomicIntegerArray
是一个可以原子地读取和修改 int 数组的类。它可以保障多个线程同时并发修改数组元素时的正确性。
下面是 AtomicIntegerArray
的一些常用方法:
AtomicIntegerArray(int[] array)
:构造方法,创建一个指定的 int 数组。int length()
:返回此数组的长度。int get(int i)
:返回此数组中下标为 i 的 int 值。int getAndSet(int i, int newValue)
:设置此数组中下标为 i 的 int 值为 newValue,并返回之前的值。void set(int i, int newValue)
:设置此数组中下标为 i 的 int 值为 newValue。int getAndAdd(int i, int delta)
:为此数组中下标为 i 的 int 值加上 delta 的值,并返回之前的值。
下面是 AtomicIntegerArray
的一个示例代码:
public class AtomicIntegerArrayDemo {
public static void main(String[] args) {
int[] values = new int[]{1, 2, 3, 4, 5};
AtomicIntegerArray atomicIntegerArray = new AtomicIntegerArray(values);
// 将数组下标为 3 的元素加上 10
int oldValue = atomicIntegerArray.getAndAdd(3, 10);
System.out.println("old value: " + oldValue);
System.out.println("new value: " + atomicIntegerArray.get(3));
}
}
运行结果:
old value: 4
new value: 14
3. AtomicLongArray
AtomicLongArray
是一个可以原子地读取和修改 long 数组的类。它可以保障多个线程同时并发修改数组元素时的正确性。
下面是 AtomicLongArray
的一些常用方法:
AtomicLongArray(long[] array)
:构造方法,创建一个指定的 long 数组。int length()
:返回此数组的长度。long get(int i)
:返回此数组中下标为 i 的 long 值。long getAndSet(int i, long newValue)
:设置此数组中下标为 i 的 long 值为 newValue,并返回之前的值。void set(int i, long newValue)
:设置此数组中下标为 i 的 long 值为 newValue。long getAndAdd(int i, long delta)
:为此数组中下标为 i 的 long 值加上 delta 的值,并返回之前的值。
下面是 AtomicLongArray
的一个示例代码:
public class AtomicLongArrayDemo {
public static void main(String[] args) {
long[] values = new long[]{1L, 2L, 3L, 4L, 5L};
AtomicLongArray atomicLongArray = new AtomicLongArray(values);
// 将数组下标为 3 的元素加上 10
long oldValue = atomicLongArray.getAndAdd(3, 10);
System.out.println("old value: " + oldValue);
System.out.println("new value: " + atomicLongArray.get(3));
}
}
运行结果:
old value: 4
new value: 14
4. AtomicReferenceArray
AtomicReferenceArray
是一个可以原子地读取和修改指定类型的数组的类。它可以保障多个线程同时并发修改数组元素时的正确性。
下面是 AtomicReferenceArray
的一些常用方法:
AtomicReferenceArray(Class<E> elementType, int length)
:构造方法,创建一个指定类型和长度的数组。int length()
:返回此数组的长度。E get(int i)
:返回此数组中下标为 i 的元素。E getAndSet(int i, E newValue)
:设置此数组中下标为 i 的元素为 newValue,并返回之前的值。void set(int i, E newValue)
:设置此数组中下标为 i 的元素为 newValue。
下面是 AtomicReferenceArray
的一个示例代码:
public class AtomicReferenceArrayDemo {
public static void main(String[] args) {
String[] values = new String[]{"A", "B", "C", "D", "E"};
AtomicReferenceArray<String> atomicReferenceArray = new AtomicReferenceArray<>(values);
// 将数组下标为 3 的元素设置为 "F"
String oldValue = atomicReferenceArray.getAndSet(3, "F");
System.out.println("old value: " + oldValue);
System.out.println("new value: " + atomicReferenceArray.get(3));
}
}
运行结果:
old value: D
new value: F
5. 总结
JUC原子类中的数组类型是非常实用的,它可以保障多个线程同时并发修改数组元素时的正确性,提高并发访问下的安全性和性能。
以上是本篇文章的全部内容,如果有疑问或者不足之处,欢迎指出,谢谢!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java并发编程专题(十一)—-(JUC原子类)数组类型详解 - Python技术站