上一节我们介绍过三个基本类型的原子类,这次我们来看一下数组类型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray。其中前两个的使用方式差不多,AtomicReferenceArray因为他的参数为引用数组,所以跟前两个的使用方式有所不同。

1.AtomicLongArray介绍

对于AtomicLongArray, AtomicIntegerArray我们还是只介绍一个,另一个使用方式大同小异。

我们先来看看AtomicLongArray的构造函数和方法:

构造函数:
AtomicLongArray(int length) //创建给定长度的新 AtomicLongArray。
AtomicLongArray(long[] array) //创建与给定数组具有相同长度的新 AtomicLongArray,并从给定数组复制其所有元素。
方法:
long addAndGet(int i, long delta) //以原子方式将给定值添加到索引 i 的元素。
boolean compareAndSet(int i, long expect, long update) //如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值。
long decrementAndGet(int i) //以原子方式将索引 i 的元素减1。
long get(int i) //获取位置 i 的当前值。
long getAndAdd(int i, long delta) //以原子方式将给定值与索引 i 的元素相加。
long getAndDecrement(int i) //以原子方式将索引 i 的元素减 1。
long getAndIncrement(int i) //以原子方式将索引 i 的元素加 1。
long getAndSet(int i, long newValue) //以原子方式将位置 i 的元素设置为给定值,并返回旧值。
long incrementAndGet(int i) // 以原子方式将索引 i 的元素加1。
void lazySet(int i, long newValue)// 最终将位置 i 的元素设置为给定值。
int length() //返回该数组的长度。
void set(int i, long newValue) //将位置 i 的元素设置为给定值。
String toString() //返回数组当前值的字符串表示形式。

2.使用方式:

我们可以发现AtomicLongArray的使用方式和上一篇介绍的基本类型的原子类差不多,无非是换成了数组类型,另外方法里面的etAndAdd与ncrementAndGet我们要注意使用方式。

3.AtomicReferenceArray介绍

我们来看一下他的方法:

构造方法:

AtomicReferenceArray(E[] array) //创建与给定数组具有相同长度的新 AtomicReferenceArray,并从给定数组复制其所有元素。
AtomicReferenceArray(int length) // 创建给定长度的新 AtomicReferenceArray。
方法:
boolean compareAndSet(int i, E expect, E update) //如果当前值 == 预期值,则以原子方式将位置 i 的元素设置为给定的更新值。
E get(int i) //获取位置 i 的当前值。
E getAndSet(int i, E newValue) // 以原子方式将位置 i 的元素设置为给定值,并返回旧值。
void lazySet(int i, E newValue) //最终将位置 i 的元素设置为给定值。
int length() //返回该数组的长度。
void set(int i, E newValue) // 将位置 i 的元素设置为给定值。
String toString() //返回数组当前值的字符串表示形式。
boolean weakCompareAndSet(int i, E expect, E update) // 如果当前值 == 预期值,则以原子方式将位置 i 的元素设置为给定的更新值。

由上我们可以看到AtomicReferenceArray与前两个的方法相比少了很多。

下面我们通过一个小例子来看一下他的使用:

public class AtomicReferenceArrayTest {
public static void main(String[] args) {
Long[] l = new Long[4];
String[] s = new String[4];
int[] i = new int[4];
Integer[] in = new Integer[4];
AtomicReferenceArray atomicReferenceArray = new AtomicReferenceArray(l);
System.out.println(atomicReferenceArray.length());
System.out.println(atomicReferenceArray.get(2)); AtomicReferenceArray atomic = new AtomicReferenceArray(4);
atomic.set(0,432141);
atomic.set(2,"fsafefeq");
atomic.set(3,i);
System.out.println(atomic.toString());
}
}

输出结果为:

exclude patterns:
4
null
[432141, null, fsafefeq, [I@357b2b99] Process finished with exit code 0

说明:

1.当我们使用AtomicReferenceArray(E[] array)这个构造方法传入一个数组对象时,该数组对象必须是引用类型,int[]不可以,但是Integer[]的可以。

2.当我们使用AtomicReferenceArray(int length)这个构造函数的时候,只要为他指定了数组大小之后,你为数组的每一位设置什么值是没有要求的,类似于Map的形式。

最新文章

  1. Delphi_09_Delphi_Object_Pascal_面向对象编程
  2. java spring 配置文件的读取
  3. mariadb用户和权限管理
  4. xcode6 使用pch出错解决办法
  5. Eclipse启动tomcat时出现报错-拒绝访问
  6. sql 递归子查询
  7. hdu2255 二分图最大权配KM
  8. js 图片处理 Jcrop.js API
  9. 为什么Android的图片质量会比iPhone的差?
  10. 【软件分析与挖掘】Multiple kernel ensemble learning for software defect prediction
  11. Form1是父,form2是子,2的出现(覆盖在1的上面)不耽误1的操作
  12. dell 交换机 双链路冗余
  13. 【杭州(含嘉兴,绍兴,金华,湖州,义乌)】Uber优步司机奖励政策(2月1日~2月7日)
  14. C++ 中mallon动态分配内存大小用法
  15. Windows Search Service
  16. APUE 1 -- Unix数据结构
  17. thinkphp的select和find的区别
  18. sqoop1.4.6导出oracle实例
  19. Exp3免杀原理与实践 20164312 马孝涛
  20. 修改Tomcat默认连接数

热门文章

  1. core文件生成和路径设置
  2. Codeforces Gym101161E:ACM Tax(主席树+LCA)
  3. HDU 1533:Going Home(KM算法求二分图最小权匹配)
  4. 微信小程序注册流程
  5. 分布式事务(2)---TCC理论
  6. spring springMVC Struts2 区别
  7. 【DFS练习】【最大的蛋糕块】-C++
  8. requests.exceptions.ChunkedEncodingError: ('Connection broken: IncompleteRead(0 bytes read)', IncompleteRead(0 bytes read))【已解决】
  9. 《C Primer Plus(第6版)中文版》勘误
  10. error: 'commit' is not possible because you have unmerged files.