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语 ...
随机推荐
- tomcat设置编码格式utf8
利用request.setCharacterEncoding("UTF-8");来设置Tomcat接收请求的编码格式,只对POST方式提交的数据有效,对GET方式提交的数据无效! ...
- 以太坊api访问,区块同步监测
以太坊geth api访问,区块同步监测 curl查询geth区块高度 supervisor管理以太坊geth进程 geth进程健康检查 # curl访问geth api #使用curl访问geth ...
- qt——exec()的基本用法
qt中 if(my1.exec()==QDialog::Accepted) 是什么意思 这个先说这个my1.exec()这个就是个等待消息的循环,就是说它在等待你给的命令. 再说这个QDialog:: ...
- mapxtreme java学习之路(1)——.dwg转.tab再转.gst详细教程
[背景] 因为项目的需要,需要在java web 项目中使用到地图,厂家提供的是dwg格式的地图,而我们采用的是mapxtreme java技术,所以先要把dwg格式的地图转成mapxtreme ja ...
- 002-Spring Framework-Core-01-IoC容器
一.概述 文章地址:https://docs.spring.io/spring/docs/5.0.6.RELEASE/spring-framework-reference/ 核心主要包括:IoC co ...
- 总结工作中常用的PHP代码
[目录] ◆PHP常用的代码 ◆HTML常用代码 [值传递 和 引用传递] [单例模式] [魔术常量] [代码调试(自定义一个简单的debug函数)] [thinkphp多表查询] [获取客户端IP地 ...
- ABP常见问题
System.Data.SqlClient.SqlException (0x80131904): 'OFFSET' 附近有语法错误 解决方案:最新的ABP默认支持的是sql2012以上的版本,对于之前 ...
- 在GUI程序中使用控制台的两种方法
win32程序启用控制台(控制台文件名:conout$,conin$,conerr$) //添加控制台,加入在程序构造函数中 AllocConsole(); freopen("conin$& ...
- Learn2Rank
Learning to rank 排序学习是推荐.搜索.广告的核心方法.排序结果的好坏很大程度影响用户体验.广告收入等.排序学习可以理解为机器学习中用户排序的方法,这里首先推荐一本微软亚洲研究院刘铁岩 ...
- ZOJ Monthly, March 2018 Solution
A - Easy Number Game 水. #include <bits/stdc++.h> using namespace std; #define ll long long #de ...