AtomicReferenceArray 原子引用数组

时间:2020-01-09 10:36:25  来源:igfitidea点击:

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类,以了解有关这些方法的更多信息。