java并发编程:线程安全管理类--原子操作类--AtomicIntegerArray
1.类 AtomicIntegerArray
aaarticlea/png;base64,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" alt="" />
可以用原子方式更新其元素的 int 数组
2.构造函数详解
AtomicIntegerArray
public AtomicIntegerArray(int length)
- 创建给定长度的新 AtomicIntegerArray。
- 参数:
length- 该数组的长度
AtomicIntegerArray
public AtomicIntegerArray(int[] array)
- 创建与给定数组具有相同长度的新 AtomicIntegerArray,并从给定数组复制其所有元素。
- 参数:
array- 从中复制元素的数组- 抛出:
NullPointerException- 如果数组为 null
3.方法详解
length
public final int length()
- 返回该数组的长度。
-
- 返回:
- 该数组的长度
get
public final int get(int i)
- 获取位置
i的当前值。 -
- 参数:
i- 索引- 返回:
- 当前值
set
public final void set(int i,
int newValue)
- 将位置
i的元素设置为给定值。 -
- 参数:
i- 索引newValue- 新值
lazySet
public final void lazySet(int i,
int newValue)
- 最后将位置
i的元素设置为给定值。 -
- 参数:
i- 索引newValue- 新值- 从以下版本开始:
- 1.6
getAndSet
public final int getAndSet(int i,
int newValue)
- 将位置
i的元素以原子方式设置为给定值,并返回旧值。 -
- 参数:
i- 索引newValue- 新值- 返回:
- 以前的值
compareAndSet
public final boolean compareAndSet(int i,
int expect,
int update)
- 如果当前值
==预期值,则以原子方式将位置i的元素设置为给定的更新值。 -
- 参数:
i- 索引expect- 预期值update- 新值- 返回:
- 如果成功,则返回 true。返回 false 指示实际值与预期值不相等。
weakCompareAndSet
public final boolean weakCompareAndSet(int i,
int expect,
int update)
- 如果当前值
==预期值,则以原子方式将位置i的元素设置为给定的更新值。可能意外失败并且不提供排序保证,所以只是在很少的情况下才对
compareAndSet进行适当地选择。 -
- 参数:
i- 索引expect- 预期值update- 新值- 返回:
- 如果成功,则返回 true。
getAndIncrement
public final int getAndIncrement(int i)
- 以原子方式将索引
i的元素加 1。 -
- 参数:
i- 索引- 返回:
- 以前的值
getAndDecrement
public final int getAndDecrement(int i)
- 以原子方式将索引
i的元素减 1。 -
- 参数:
i- 索引- 返回:
- 以前的值
getAndAdd
public final int getAndAdd(int i,
int delta)
- 以原子方式将给定值与索引
i的元素相加。 -
- 参数:
i- 索引delta- 要加上的值- 返回:
- 以前的值
incrementAndGet
public final int incrementAndGet(int i)
- 以原子方式将索引
i的元素加 1。 -
- 参数:
i- 索引- 返回:
- 更新的值
decrementAndGet
public final int decrementAndGet(int i)
- 以原子方式将索引
i的元素减 1。 -
- 参数:
i- 索引- 返回:
- 更新的值
addAndGet
public final int addAndGet(int i,
int delta)
- 以原子方式将给定值与索引
i的元素相加。 -
- 参数:
i- 索引delta- 要加上的值- 返回:
- 更新的值
toString
public String toString()
java并发编程:线程安全管理类--原子操作类--AtomicIntegerArray的更多相关文章
- java并发编程 线程基础
java并发编程 线程基础 1. java中的多线程 java是天生多线程的,可以通过启动一个main方法,查看main方法启动的同时有多少线程同时启动 public class OnlyMain { ...
- Java 并发编程 | 线程池详解
原文: https://chenmingyu.top/concurrent-threadpool/ 线程池 线程池用来处理异步任务或者并发执行的任务 优点: 重复利用已创建的线程,减少创建和销毁线程造 ...
- Java并发编程:线程间通信wait、notify
Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...
- Java并发编程:线程和进程的创建(转)
Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...
- java并发编程 | 线程详解
个人网站:https://chenmingyu.top/concurrent-thread/ 进程与线程 进程:操作系统在运行一个程序的时候就会为其创建一个进程(比如一个java程序),进程是资源分配 ...
- java并发编程系列二:原子操作/CAS
什么是原子操作 不可被中断的一个或者一系列操作 实现原子操作的方式 Java可以通过锁和循环CAS的方式实现原子操作 CAS( Compare And Swap ) 为什么要有CAS? Compar ...
- Java并发编程——线程池的使用
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...
- Java并发编程——线程池
本文的目录大纲: 一.Java中的ThreadPoolExecutor类 二.深入剖析线程池实现原理 三.使用示例 四.如何合理配置线程池的大小 一.Java中的ThreadPoolExecutor类 ...
- Java并发编程(三)Thread类的使用
一.线程的状态 线程从创建到最终的消亡,要经历若干个状态.一般来说,线程包括以下这几个状态:创建(new).就绪(runnable).运行(running).阻塞(blocked).time wait ...
- [转]JAVA并发编程学习笔记之Unsafe类
1.通过Unsafe类可以分配内存,可以释放内存:类中提供的3个本地方法allocateMemory.reallocateMemory.freeMemory分别用于分配内存,扩充内存和释放内存,与C语 ...
随机推荐
- Django - 路由层(URLconf)
一.django 静态文件配置 /mysite1/settings.py STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_ ...
- python中的下划线(私有变量)
Python用下划线作为变量前缀和后缀指定特殊变量. - "单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量:不能用"from xx ...
- oracle(十一) scn
SCN(System Chang Number)作为oracle中的一个重要机制,在数据恢复.Data Guard.Streams复制.RAC节点间的同步等各个功能中起着重要作用. 理解SCN的运作机 ...
- 多图片生成pdf文件
这里记录多个图片合并生成一个pdf文件的方法. 首先maven引入所需jar包: <dependency> <groupId>com.itextpdf</groupId& ...
- python学习笔记(二十九)为什么python的多线程不能利用多核CPU
问题:为什么python的多线程不能利用多核CPU,但是咱们在写代码的时候,多线程的确是在并发,而且还比单线程快原因:因为GIL,python只有一个GIL,运行python时,就要拿到这个锁才能执行 ...
- 跟我学Makefile(二)
命令出错: 每当命令运行完后, make 会检测每个命令的返回码,如果命令返回成功,那么 make 会执行下一条命令. 如果一个规则中的某个命令出错了(命令退出码非零),那么 make 就会终止执行当 ...
- oracle 保留小数位
方法一:使用to_char的fm格式 to_char(round(data.amount,2),'FM9999999999999999.00') as amount 不足之处是,如果数值是0的话,会显 ...
- mysql索引之聚簇索引与非聚簇索引
1 数据结构及算法基础 1.1 索引的本质 官方定义:索引(Index)是帮助MySQL高效获取数据的数据结构 本质:索引是数据结构 查询是数据库的最主要功能之一.我们都希望查询速度能尽可能快,因此数 ...
- org.apache.ibatis.exceptions.TooManyResultsException的异常排查过程
在查阅测试环境业务日志中的ERROR级别的日志时,发现了有一个Mybatis相关的异常错误org.apache.ibatis.exceptions.TooManyResultsException: E ...
- deepin中crossover或playonlinux装完office后word无法输入中文的问题
原因:office安装是自带了一个微软输入法 解决:装offce时进行自定义安装,在office共享功能里,把输入法去掉. 参考: https://jingyan.baidu.com/article/ ...