使用原子的方式更新數(shù)組里的某個(gè)元素
- AtomicIntegerArray:整形數(shù)組原子類(lèi)
- AtomicLongArray:長(zhǎng)整形數(shù)組原子類(lèi)
- AtomicReferenceArray :引用類(lèi)型數(shù)組原子類(lèi)
上面三個(gè)類(lèi)提供的方法幾乎相同,所以這里以 AtomicIntegerArray 為例子來(lái)介紹。
AtomicIntegerArray 類(lèi)常用方法
public final int get(int i); // 獲取 index=i 位置元素的值
public final int getAndSet(int i, int newValue); // 返回 index=i 位置的當(dāng)前的值平项,并將其設(shè)置為新值:newValue
public final int getAndIncrement(int i); // 獲取 index=i 位置元素的值出爹,并讓該位置的元素自增
public final int getAndDecrement(int i); // 獲取 index=i 位置元素的值薪捍,并讓該位置的元素自減
public final int getAndAdd(int delta); // 獲取 index=i 位置元素的值残炮,并加上預(yù)期的值
boolean compareAndSet(int expect, int update); // 如果輸入的數(shù)值等于預(yù)期值道媚,則以原子方式將 index=i 位置的元素值設(shè)置為輸入值(update)
public final void lazySet(int i, int newValue); // 最終 將index=i 位置的元素設(shè)置為newValue,使用 lazySet 設(shè)置之后可能導(dǎo)致其他線程在之后的一小段時(shí)間內(nèi)還是可以讀到舊的值
AtomicIntegerArray 常見(jiàn)方法使用
import java.util.concurrent.atomic.AtomicIntegerArray;
public class AtomicIntegerArrayTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
int temvalue = 0;
int[] nums = { 1, 2, 3, 4, 5, 6 };
AtomicIntegerArray i = new AtomicIntegerArray(nums);
for (int j = 0; j < nums.length; j++) {
System.out.println(i.get(j));
}
temvalue = i.getAndSet(0, 2);
System.out.println("temvalue:" + temvalue + "; i:" + i);
temvalue = i.getAndIncrement(0);
System.out.println("temvalue:" + temvalue + "; i:" + i);
temvalue = i.getAndAdd(0, 5);
System.out.println("temvalue:" + temvalue + "; i:" + i);
}
}