AtomicIntegerArray、AtomicLongArray等类的使用

/ 多线程 / 没有评论 / 452浏览

这篇我们继续介绍在并发工具包中的原子类的使用。

java.util.concurrent.atomic

和上一篇一样这几个类的使用方法几乎是一样的,所以我们以AtomicIntegerArray类来演示该原子类的使用,因为在上一篇中我们已经实验过了,这个包下的类确实是原子操作的,也就是说是线程安全的,所以下面的事例的重点在于演示方法的使用,而不是在编写多线程程序了。

/**
* @author Sama
* @author admin@jilinwula.com
* @date 2017-03-20 13:35
* @since 1.0.0
*/
public class Test {
public static void main(String[] args) throws InterruptedException {
AtomicIntegerArray array = new AtomicIntegerArray(new int[]{1, 2, 3});
System.out.println(array.addAndGet(1, 2));
}
}
4

AtomicIntegerArray类中的addAndGet()方法和AtomicInteger类中addAndGet()方法基本一样,唯一不同的就是多了一个数组的索引参数,操作时也就是通过操作的这个数组对象的索引值。因为初始化数组是1,2,3我们更改的索引是1所以它更新的值就因为是数组中的第二个元素2(数组索引从0开始),又因为addAndGet()方法的作用是执行参数的相加,所以输出的值为4。

下面我们在看一下compareAndSet()方法。

/**
* @author Sama
* @author admin@jilinwula.com
* @date 2017-03-20 13:35
* @since 1.0.0
*/
public class Test {
public static void main(String[] args) throws InterruptedException {
AtomicIntegerArray array = new AtomicIntegerArray(new int[]{1, 2, 3});
System.out.println(array.get(1));
System.out.println(array.compareAndSet(1, 2, 3));
System.out.println(array.get(1));
}
}
2
true
3

compareAndSet()方法的使用和上面是一样的,还是要传一个索引的参数,因为索引我们传的是1所以还是更新数组中第二个元素也就是2,因为2和compareAndSet()方法中我们预期的值2是一样的,所以返回true,并且将数组中第二个参数的值设置为3。