C/C++教程

AtomicReferenceArray

本文主要是介绍AtomicReferenceArray,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

本文翻译自http://tutorials.jenkov.com/java-util-concurrent/atomicreferencearray.html,人工翻译,仅供学习交流。

AtomicReferenceArray

atomic包中的AtomicReferenceArray是一个可以原子更新的对象引用数组。AtomicReferenceArray类也支持比较并交换功能。

创建AtomicReferenceArray

您可以使用AtomicReferenceArray的两个构造函数之一来创建它。第一个构造函数接受一个int作为形参,这个int指定要创建的AtomicReferenceArray的长度,意思是它应该有多少元素的空间。下面是一个使用此构造函数创建AtomicReferenceArray的Java示例:

AtomicReferenceArray array = new AtomicReferenceArray(10);

这个例子创建了一个AtomicReferenceArray,容量为10(它有容纳10个引用对象的空间)。
第二个构造函数接受一个E[]数组作为参数,其中E是对象引用的类型(类)。使用此构造函数创建的AtomicReferenceArray将具有与数组参数相同的容量,并且数组参数中的所有元素将被复制到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()方法返回具有给定索引的元素的值。索引作为参数传递给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有一个泛型类型,此参数的类型将是该类型。否则类型为Object。

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);

这个例子首先创建了一个String数组,并将索引为5的元素设置为指向string1的引用。它将索引为5的元素的值与string1的引用进行比较,如果它们相同,则将元素的引用设置为string2。如果没有其他线程改变索引为5的元素的引用(在上述情况下,哪一个是不可能的),然后设置成功(设置新的引用)。

附加方法

AtomicIntegerArray还有几个用于特殊目的的方法。您应该查看AtomicIntegerArray类的JavaDoc,以了解有关这些方法的更多信息。

这篇关于AtomicReferenceArray的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!