AtomicReferenceArray 原子引用数组
java.util.concurrent.atomic包中的AtomicReferenceArray是对象引用的数组,可以原子方式对其进行更新。 AtomicReferenceArray类还支持比较和交换函数。
创建一个AtomicReferenceArray
我们可以使用两个构造函数之一创建一个AtomicReferenceArray。
第一个构造函数采用" int"作为参数。这个int
指定要创建的AtomicReferenceArray
的长度,这意味着它应该有多少个元素。这是一个使用此构造函数创建AtomicReferenceArray
的Java示例:
AtomicReferenceArray array = new AtomicReferenceArray(10);
本示例创建一个容量为10的" AtomicReferenceArray"(它有10个对象引用作为元素的空间)。
第二个构造函数使用一个" E []"数组作为参数,其中E是对象引用的类型(类)。使用此构造函数创建的AtomicReferenceArray
将具有与array参数相同的容量,并且该array参数中的所有元素都将被复制到AtomicReferenceArray
中。这是一个使用此构造函数创建AtomicReferenceArray
的Java示例:
Object[] source = new Object[10]; source[5] = "Some string"; AtomicReferenceArray array = new AtomicReferenceArray(source);
这个例子首先创建一个" Object []"数组,并为索引为5的元素设置一个值。然后,它以" Object []"数组作为参数创建一个" AtomicReferenceArray"。
我们还可以为AtomicReferenceArray设置通用类型。这是上面的示例,其中泛型类型设置为String
:
String[] source = new String[10]; source[5] = "Some string"; AtomicReferenceArray<String> array = new AtomicReferenceArray<String>(source);
得到()
get()方法返回具有给定索引的元素的值。索引作为参数传递给get()方法。这是一个例子:
Object element = array.get(5);
如果AtomicReferenceArray具有泛型类型,则get()方法将返回该类型的对象。例如,如果通用类型为String
,则可以这样调用get()
:
String element = array.get(5);
注意,不需要强制转换为String
。
放()
set()方法设置具有特定索引的元素的值。索引和值作为参数传递给set()方法。这是一个" set()"示例:
array.set(5, "another object");
第一个参数是要设置的元素的索引。第二个参数是为元素设置的值。如果AtomicReferenceArray
具有泛型类型,则此参数的类型将为该类型。否则,类型为"对象"。
compareAndSet()
AtomicReferenceArray的compareAndSet()方法可以将存储在给定元素中的当前引用与预期引用进行比较,如果引用相同,则将当前引用替换为新引用。这是一个" compareAndSwap()"示例:
String string1 = "string1"; String string2 = "string2"; String[] source = new String[10]; source[5] = string1; AtomicReferenceArray<String> array = new AtomicReferenceArray<String>(source); array.compareAndSet(5, string1, string2);
此示例首先创建一个"字符串"数组,并将索引为5的元素设置为指向"字符串1"引用。然后,它将具有索引5的元素的值与" string1"引用进行比较,如果它们相同,则将元素的引用设置为" string2"。如果没有其他线程更改索引为5的元素的引用(在上述情况下是不可能的),则设置成功(设置了新引用)。
添加方法
" AtomicReferenceArray"还有其他几种方法可以用于特殊目的。我们应该查看JavaDoc中的AtomicReferenceArray类,以了解有关这些方法的更多信息。