本文翻译自http://tutorials.jenkov.com/java-util-concurrent/atomicintegerarray.html,人工翻译,仅供学习交流。
AtomicIntegerArray
java.util.concurrent.atomic.AtomicIntegerArray表示一个int数组。AtomicIntegerArray中的int元素可以原子更新。AtomicIntegerArray还支持比较并交换功能。
创建AtomicIntegerArray
可以使用AtomicIntegerArray的两个构造函数之一创建AtomicIntegerArray。
第一个构造函数接受一个int作为形参,这个int指定要创建的AtomicIntegerArray的长度,意思是它应该有多少元素的空间。下面是一个使用此构造函数创建AtomicIntegerArray的Java示例:
AtomicIntegerArray array = new AtomicIntegerArray(10);
这个例子创建了一个AtomicIntegerArray,容量为10个int(它有10个int元素的空间)。
第二个构造函数接受一个int[]数组作为参数。使用此构造函数创建的AtomicIntegerArray将具有与数组参数相同的容量,并且数组参数中的所有元素将被复制到AtomicIntegerArray中。下面是一个使用此构造函数创建AtomicIntegerArray的Java示例:
int[] ints = new int[10];
ints[5] = 123;
AtomicIntegerArray array = new AtomicIntegerArray(ints);
这个例子首先创建一个int[]数组,并在索引为5的元素中设置一个值。然后它创建一个AtomicIntegerArray,参数是int[]数组。
get()
可以使用AtomicIntegerArray上的get()方法获取给定元素的值。下面是一个调用get()方法的例子:
int value = array.get(5);
set()
可以使用AtomicIntegerArray的set()方法设置给定元素的值。下面是一个调用set()方法的例子:
array.set(5, 999);
compareAndSet()
compare andset()方法用于将给定元素的值与指定的值进行比较,如果两个值相等,则为该元素设置一个新值。这是AtomicIntegerArray支持原子比较和交换功能的一个示例。每次只有一个线程可以执行compareAndSet()方法。下面是如何调用AtomicIntegerArray的compareAndSet()方法:
boolean swapped = array.compareAndSet(5, 999, 123);
本例将索引为5的元素与预期值999进行比较,如果相等,则为下标为5的元素设置新值123。compareAndSet()方法返回一个布尔值,如果元素被设置为新值,则返回true,否则为false。
addAndGet()
AtomicIntegerArray还包含一个方法,可用于向给定元素添加值,并返回元素的新值。调用addAndGet()也是一个原子操作(就像AtomicIntegerArray的所有操作一样)。下面是一个调用addAndGet()的例子:
int newValue = array.addAndGet(5, 3);
执行此代码后,newValue变量将包含索引为5并添加了3的元素的值。
getAndAdd()
AtomicIntegerArray类还包含一个名为getAndAdd()的方法。getAndAdd()方法和addAndGet()方法一样,除了getAndAdd()方法在添加值之前返回元素的值,下面是一个getAndAdd()的例子:
int oldValue = array.getAndAdd(5, 3);
执行这段代码后,在添加值3之前,变量oldValue将包含索引为5的元素的旧值。
incrementAndGet()
incrementAndGet()方法将给定元素的值加1返回该元素的新值。下面是一个incrementAndGet()的例子:
int newValue = array.incrementAndGet(5);
执行此代码后,newValue变量将包含索引为5并添加了1的元素的值。
getAndIncrement()
AtomicIntegerArray类还包含一个名为getAndIncrement()的方法。getAndIncrement()方法和incrementAndGet()方法做的是一样的,除了getAndIncrement()方法返回元素递增前的值。下面是一个getAndIncrement()的例子:
int oldValue = array.getAndIncrement(5);
执行此代码后,变量oldValue将包含索引为5的元素的旧值,在它被递增之前(给它加1)。
decrementAndGet()
decrementAndGet()方法将给定元素的值减1,返回该元素的新值。下面是一个decrementAndGet()的例子:
int newValue = array.decrementAndGet(5);
执行此代码后,newValue变量将包含索引为5的元素的值,并从中减去1。
getAndDecrement()
AtomicIntegerArray类还包含一个名为getAndDecrement()的方法。getAndDecrement()方法和decrementAndGet()方法做的是一样的,除了getAndDecrement()方法返回元素递减前的值。下面是一个getAndDecrement()的例子:
int oldValue = array.getAndDecrement(5);
执行这段代码后,变量oldValue将包含带有inde的元素的旧值,在它被递增之前(给它加1)。
附加方法
AtomicIntegerArray还有几个用于特殊目的的方法。您应该查看AtomicIntegerArray类的JavaDoc,以了解有关这些方法的更多信息。