Java多线程系列--“JUC原子类”02之 AtomicLongArray原子类
来源:互联网 发布:聚才道软件jucaidaorj 编辑:程序博客网 时间:2024/05/21 15:50
AtomicLongArray介绍和函数列表
在"Java多线程系列--“JUC原子类”02之 AtomicLong原子类"中介绍过,AtomicLong是作用是对长整形进行原子操作。而AtomicLongArray的作用则是对"长整形数组"进行原子操作。
AtomicLongArray函数列表
AtomicLongArray的代码很简单,下面仅以incrementAndGet()为例,对AtomicLong的原理进行说明。
incrementAndGet()源码如下:
public final long incrementAndGet(int i) {
return addAndGet(i, 1);
}
说明:incrementAndGet()的作用是以原子方式将long数组的索引 i 的元素加1,并返回加1之后的值。
addAndGet()源码如下:
说明:addAndGet()首先检查数组是否越界。如果没有越界的话,则先获取数组索引i的值;然后通过CAS函数更新i的值。
getRaw()源码如下:
private long getRaw(long offset) {
return unsafe.getLongVolatile(array, offset);
}
说明:unsafe是通过Unsafe.getUnsafe()返回的一个Unsafe对象。通过Unsafe的CAS函数对long型数组的元素进行原子操作。如compareAndSetRaw()就是调用Unsafe的CAS函数,它的源码如下:
private boolean compareAndSetRaw(long offset, long expect, long update) {
return unsafe.compareAndSwapLong(array, offset, expect, update);
}
AtomicLongArray示例
运行结果:
get(0) : 100
get(1) : 20
get(2) : 30
get(3) : 40
get(4) : 50
getAndDecrement(0) : 100
decrementAndGet(1) : 19
getAndIncrement(2) : 30
incrementAndGet(3) : 41
addAndGet(100) : 199
getAndAdd(100) : 19
compareAndSet() : true
get(2) : 1000
- Java多线程系列--【JUC原子类02】- AtomicLongArray原子类
- Java多线程系列--“JUC原子类”02之 AtomicLongArray原子类
- Java多线程系列--“JUC原子类”03之 AtomicLongArray原子类
- Java多线程系列--“JUC原子类”03之 AtomicLongArray原子类 (r)
- JUC原子类-03之 AtomicLongArray原子类
- Java多线程系列--“JUC原子类”02之 AtomicLong原子类
- Java多线程系列--“JUC原子类”02之 AtomicLong原子类 (r)
- Java多线程系列--【JUC原子类01】- AtomicLong原子类
- Java多线程系列--【JUC原子类03】- AtomicReference原子类
- Java多线程系列--【JUC原子类04】- AtomicLongFieldUpdater原子类
- Java多线程系列--“JUC原子类”
- Java多线程系列--“JUC原子类”01之 框架
- Java多线程系列--“JUC原子类”01之 框架 (r)
- Java多线程系列--“JUC原子类”01之 框架
- JAVA多线程之JUC原子类
- Java多线程系列--“JUC原子类”04之 AtomicReference原子类
- Java多线程系列--“JUC原子类”05之 AtomicLongFieldUpdater原子类
- Java多线程系列--“JUC原子类”04之 AtomicReference原子类
- 属性和方法的调用
- Lambda架构 vs Kappa架构
- 从经典面试题看java中类的加载机制
- Struts2+Spring3+Hibernate3整合
- 感谢信----- CSDN的朋友
- Java多线程系列--“JUC原子类”02之 AtomicLongArray原子类
- 一种Java运行时动态生成class的方法
- JS & JQuery 动态添加 select option
- Ionic2+angularjs2热更新APP步骤
- Access,SQL
- 跳出多重循环的通用方法
- Java多线程系列--“JUC原子类”03之 AtomicReference原子类
- mongo 集群安装
- 在Spring data MongoDB中实现批量删除记录