java并发编程专题(十一)----(JUC原子类)数组类型详解

 更新时间:2020年07月03日 11:03:50   作者:rickiyang  
这篇文章主要介绍了JAVA JUC原子类 数组类型详解的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下

上一节我们介绍过三个基本类型的原子类,这次我们来看一下数组类型: 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. 1.当我们使用AtomicReferenceArray(E[] array)这个构造方法传入一个数组对象时,该数组对象必须是引用类型,int[]不可以,但是Integer[]的可以。
  2. 2.当我们使用AtomicReferenceArray(int length)这个构造函数的时候,只要为他指定了数组大小之后,你为数组的每一位设置什么值是没有要求的,类似于Map的形式。

以上就是java并发编程专题(十一)----(JUC原子类)数组类型详解的详细内容,更多关于JAVA (JUC原子类)的数组类型的资料请关注脚本之家其它相关文章!

相关文章

  • 使用java的注解(用在java类的方法上的注解)方法

    使用java的注解(用在java类的方法上的注解)方法

    这篇文章主要介绍了使用java的注解(用在java类的方法上的注解)方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Java使用FilenameFilter查找出目录下指定后缀的文件示例

    Java使用FilenameFilter查找出目录下指定后缀的文件示例

    这篇文章主要介绍了Java使用FilenameFilter查找出目录下指定后缀的文件,结合实例形式分析了java基于FilenameFilter类的文件遍历、查找相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • JAVA API 实用类 String详解

    JAVA API 实用类 String详解

    这篇文章主要介绍了java String的深入理解的相关资料,希望通过本文大家能理解String的用法,需要的朋友可以参考下
    2021-10-10
  • 二叉排序树的实现与基本操作

    二叉排序树的实现与基本操作

    二叉排序树又称二叉查找树。本文主要对二叉排序树的实现与基本操作进行详细介绍,以下代码实现了:1、二叉树的构建;2、二叉树的中、前、后、层序遍历;3、二叉树中结点的最大距离。下面就跟着小编一起来看下吧
    2016-12-12
  • Java Validation Api实现原理解析

    Java Validation Api实现原理解析

    这篇文章主要介绍了Java Validation Api实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 总结Java调用Python程序方法

    总结Java调用Python程序方法

    这篇文章主要介绍了总结Java调用Python程序方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 实例详解Java中ThreadLocal内存泄露

    实例详解Java中ThreadLocal内存泄露

    这一篇文章我们来分析一个Java中ThreadLocal内存泄露的案例。分析问题的过程比结果更重要,理论结合实际才能彻底分析出内存泄漏的原因。
    2016-08-08
  • crawler4j抓取页面使用jsoup解析html时的解决方法

    crawler4j抓取页面使用jsoup解析html时的解决方法

    crawler4j对response没有指定编码的页面,解析成乱码,很让人烦恼,下面给出解决方法,需要的朋友可以参考下
    2014-04-04
  • Maven及Springboot配置JDK版本,编码,源码打包等方式

    Maven及Springboot配置JDK版本,编码,源码打包等方式

    这篇文章主要介绍了Maven及Springboot配置JDK版本,编码,源码打包等方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • SpringMVC使用@Valid注解进行数据验证的方法

    SpringMVC使用@Valid注解进行数据验证的方法

    本篇文章主要介绍了SpringMVC使用@Valid注解进行数据验证的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02

最新评论