数组也可以实现cas操作,有以下几个类以及用法如下:

public class AtomicTntegerArrayTest {
public static void main(String[] args) {
AtomicIntegerArray atomicIntegerArray=new AtomicIntegerArray(3);
AtomicLongArray atomicIntegerArray1=new AtomicLongArray(3);
AtomicReferenceArray atomicReferenceArray=new AtomicReferenceArray(3);
//1.获取长度 length
System.out.println("方法1");
System.out.println(atomicIntegerArray.length());
//2.将下标i的值设置为 newValue,并且返回旧的值 getAndSet
System.out.println("方法2");
System.out.println(atomicIntegerArray.getAndSet(0,1));
System.out.println(atomicIntegerArray.get(0));
//3.进行CAS操作,比较修改compareAndSet
System.out.println("方法3");
boolean b = atomicIntegerArray.compareAndSet(0, 1, 2);
boolean b1 = atomicIntegerArray.compareAndSet(0, 1, 2);
System.out.println(b);
System.out.println(b1);
//4.将数组的第几个,加1 getAndIncrement,减1 getAndDecrement,返回旧值
System.out.println("方法4");
System.out.println(atomicIntegerArray.getAndIncrement(0));;
System.out.println(atomicIntegerArray.get(0));
System.out.println(atomicIntegerArray.getAndDecrement(0));
System.out.println(atomicIntegerArray.get(0));
//5.将第几个元素 加多少addAndGet 返回新值和getAndAdd 返回旧值
System.out.println("方法5");
System.out.println(atomicIntegerArray.get(0));
System.out.println(atomicIntegerArray.addAndGet(0,3));
System.out.println(atomicIntegerArray.get(0));
System.out.println(atomicIntegerArray.getAndAdd(0, 3));
System.out.println(atomicIntegerArray.get(0));
}
}

运行结果为:

方法1
3
方法2
0
1
方法3
true
false
方法4
2
3
3
2
方法5
2
5
5
5
8

4.4.6 数组也能无锁:AtomicIntegerArray的更多相关文章

  1. 【实战Java高并发程序设计 4】数组也能无锁:AtomicIntegerArray

    除了提供基本数据类型外,JDK还为我们准备了数组等复合结构.当前可用的原子数组有:AtomicIntegerArray.AtomicLongArray和AtomicReferenceArray,分别表 ...

  2. 【实战Java高并发程序设计6】挑战无锁算法:无锁的Vector实现

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...

  3. 一个可无限伸缩且无ABA问题的无锁队列

    关于无锁队列,详细的介绍请参考陈硕先生的<无锁队列的实现>一文.然进一步,如何实现一个不限node数目即能够无限伸缩的无锁队列,即是本文的要旨. 无锁队列有两种实现形式,分别是数组与链表. ...

  4. [转]透过 Linux 内核看无锁编程

    非阻塞型同步 (Non-blocking Synchronization) 简介 如何正确有效的保护共享数据是编写并行程序必须面临的一个难题,通常的手段就是同步.同步可分为阻塞型同步(Blocking ...

  5. 实现无锁的栈与队列(5):Hazard Pointer

    两年多以前随手写了点与 lock free 相关的笔记:1,2,3,4,质量都不是很高其实(读者见谅),但两年来陆陆续续竟也有些阅读量了(可见剑走偏锋的技巧是多容易吸引眼球).笔记当中在解决内存释放和 ...

  6. zeromq源码分析笔记之无锁队列ypipe_t(3)

    在上一篇中说到了mailbox_t的底层实际上使用了管道ypipe_t来存储命令.而ypipe_t实质上是一个无锁队列,其底层使用了yqueue_t队列,ypipe_t是对yueue_t的再包装,所以 ...

  7. boost 无锁队列

    一哥们翻译的boost的无锁队列的官方文档 原文地址:http://blog.csdn.net/great3779/article/details/8765103 Boost_1_53_0终于迎来了久 ...

  8. 无锁模式的Vector

    这两天学习无锁的并发模式,发现相比于传统的 同步加锁相比,有两点好处1.无锁 模式 相比于 传统的 同步加锁  提高了性能 2.无锁模式 是天然的死锁免疫 下来介绍无锁的Vector--- LockF ...

  9. Java高并发之无锁与Atomic源码分析

    目录 CAS原理 AtomicInteger Unsafe AtomicReference AtomicStampedReference AtomicIntegerArray AtomicIntege ...

随机推荐

  1. 汇编_指令_LEA和MOV的区别

    就是目标地址传送指令: 将一个近地址指针写入到指定的寄存器.格式: LEA reg16,mem16 其中reg16必须是一个16位通用寄存器,mem16必须是一个存储器,执行这个指令后,就将mem16 ...

  2. JNI的一个简单实例

    本例子使用的操作系统MacOS, 64位JVM. JNI编写的几个步骤如下: 编写Java代码,并注明native方法: public class HelloJni { public native v ...

  3. PoJ 1595 PrimeCuts

    Prime Cuts Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9339   Accepted: 3562 Descri ...

  4. JS中的面向对象

    创建对象的几种常用方式: 1,使用Object或对象字面量创建对象. 2,工厂模式创建对象. 3,构造函数模式创建对象. 4,原型模式创建对象. 使用Object或对象字面量创建对象: var stu ...

  5. spring 的xml配置使用p标签简化

    1.常见配置 比如配置数据源 读取properties <!-- 配置阿里巴巴数据源 --> <bean id="dataSource" class=" ...

  6. Mybit错误,提示There is no getter for property named 'tid' in 'class java.lang.String'

    改成 <select id="queryStudentByNum" resultType="student" parameterType="st ...

  7. ARM汇编中值滤波实验

    其实就是 汇编的排序然后选出中位数 排序写的是最直接的冒泡排序,因为简单. 相应的C代码 r2=r0; while(r1<r0){ r1++; r2=r2-; r3=; while(r3< ...

  8. leetcode419

    public class Solution { public int CountBattleships(char[,] board) { );//3行 );//4列 ; ; i < row; i ...

  9. 微信小程序从入坑到放弃之坑十二:navigator无法跳转的坑

    转自:http://www.yilingsj.com/xwzj/2018-11-25/weixin-miniprogram-navigator.html 微信小程序中的页面跳转用navigator就行 ...

  10. django -- url (模版语言 {% url 'test1' param1=5 param2=6 %})

    如果想让form表单提交的url是类似 action="/index-5-6.html" 这样的,可以在html模版语言中使用{% url 'test1' param1=5 par ...