数组类型原子类

使用原子的方式更新数组里的某个元素

  • AtomicIntegerArray:整形数组原子类
  • AtomicLongArray:长整形数组原子类
  • AtomicReferenceArray :引用类型数组原子类

上面三个类提供的方法几乎相同,所以这里以 AtomicIntegerArray 为例子来介绍。

AtomicIntegerArray 类常用方法

public final int get(int i);  // 获取 index=i 位置元素的值

public final int getAndSet(int i, int newValue);  // 返回 index=i 位置的当前的值,并将其设置为新值: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 位置元素的值,并加上预期的值

boolean compareAndSet(int expect, int update);  // 如果输入的数值等于预期值,则以原子方式将 index=i 位置的元素值设置为输入值(update)

public final void lazySet(int i, int newValue);  // 最终 将index=i 位置的元素设置为newValue,使用 lazySet 设置之后可能导致其他线程在之后的一小段时间内还是可以读到旧的值

AtomicIntegerArray 常见方法使用

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

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。