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.当我们使用AtomicReferenceArray(E[] array)这个构造方法传入一个数组对象时,该数组对象必须是引用类型,int[]不可以,但是Integer[]的可以。
2.当我们使用AtomicReferenceArray(int length)这个构造函数的时候,只要为他指定了数组大小之后,你为数组的每一位设置什么值是没有要求的,类似于Map的形式。
java并发编程(十二)----(JUC原子类)数组类型介绍的更多相关文章
- java并发编程(十一)----(JUC原子类)基本类型介绍
上一节我们说到了基本原子类的简单介绍,这一节我们先来看一下基本类型: AtomicInteger, AtomicLong, AtomicBoolean.AtomicInteger和AtomicLong ...
- [Java并发编程(二)] 线程池 FixedThreadPool、CachedThreadPool、ForkJoinPool?为后台任务选择合适的 Java executors
[Java并发编程(二)] 线程池 FixedThreadPool.CachedThreadPool.ForkJoinPool?为后台任务选择合适的 Java executors ... 摘要 Jav ...
- java多线程系类:JUC原子类:03之AtomicLongArray原子类
概要 AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray这3个数组类型的原子类的原理和用法相似.本章以AtomicLongArray对数 ...
- Java并发编程(二)如何保证线程同时/交替执行
第一篇文章中,我用如何保证线程顺序执行的例子作为Java并发系列的开胃菜.本篇我们依然不会有源码分析,而是用另外两个多线程的例子来引出Java.util.concurrent中的几个并发工具的用法. ...
- java并发编程工具类JUC第四篇:LinkedBlockingQueue链表队列
在之前的文章中已经为大家介绍了java并发编程的工具:BlockingQueue接口.ArrayBlockingQueue.DelayQueue. LinkedBlockingQueue 队列是Blo ...
- java并发编程工具类JUC第七篇:BlockingDeque双端阻塞队列
在之前的文章中已经为大家介绍了java并发编程的工具:BlockingQueue接口.ArrayBlockingQueue.DelayQueue.LinkedBlockingQueue.Priorit ...
- java并发编程工具类JUC第八篇:ConcurrentHashMap
在之前的文章中已经为大家介绍了java并发编程的工具:BlockingQueue接口.ArrayBlockingQueue.DelayQueue.LinkedBlockingQueue.Priorit ...
- [Java 并发] Java并发编程实践 思维导图 - 第一章 简单介绍
阅读<Java并发编程实践>一书后整理的思维导图.
- java并发编程(十)----JUC原子类介绍
今天我们来看一下JUC包中的原子类,所谓原子操作是指不会被线程调度机制打断的操作:这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程),原子操作可以是 ...
随机推荐
- CSU 1811: Tree Intersection(线段树启发式合并||map启发式合并)
http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1811 题意:给出一棵树,每一个结点有一个颜色,然后依次删除树边,问每次删除树边之后,分开的两个 ...
- sqlserver、oracle数据库排序空值null问题解决办法
转:https://www.cnblogs.com/pacer/archive/2010/03/02/1676371.html [sqlserver]: sqlserver 认为 null 最小. 升 ...
- Larave使用composer安装无反应,提示“Changed current directory to C:/Users/Administrator/AppData/Roaming/Composer”
按照Laravel文档的安装方式在windows上安装Laravel时,执行composer global require "laravel/installer". 然后命令行就显 ...
- C++一些知识的整理
1. C 和 C++ 区别 C++支持多种编程范式:面向对象编程.泛型编程.过程化编程.支持类.封装.重载等特性. c和c++的头文件不同. 输入输出不同. 变量的声明定义不同:c语言:变量要放在语句 ...
- binlog_format日志错误
客户磁盘空间不够用,发现mysql的err日志文件已每天大概600M-800M的速度增长,开头考虑作日志切割,打开发现,整个7.8G的文件里面百分之99的文件全部是如下所示的warning警告信息 1 ...
- QQ Music 音乐插件DFX unable to open skin configration 的解决方法
设置 C:\Program Files (x86)\Tencent\QQMusic\Plugins\Dfx\dfx_skin.txt 它的权限 允许程序读取执行
- Excel催化剂开源第11波-动态数组函数技术开源及要点讲述
在Excel催化剂中,大量的自定义函数使用了动态数组函数效果,虽然不是原生的Excel365版效果(听说Excel2019版取消了支持动态数组函数,还没求证到位,Excel365是可以用,但也仅限于部 ...
- 下拉选择框,PopupWindow的使用
实现下拉选择框 直接上代码 Activity.java package com.example.shaofei.customerviewdemo1; import android.os.Bundle; ...
- C# 一句很简单而又很经典的代码
一.知识点 二.问题 如果以上四个问题,你很自信,那么以下,您就不要看了,因为我想说的东西真的很简单. 如果你开始怀疑自己,可以继续向下看.你自己到底真的理解吗??? 再看下面这段代码有没有问题? c ...
- 第一篇:开始进入 django 之旅
文中所有示例代码的仓库地址:https://github.com/HelloGitHub-Team/HelloDjango-blog-tutorial 开发环境说明 本教程写作时开发环境的系统平台为 ...