数组也可以实现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.获取长度 lengthSystem.out.println("方法1");System.out.println(atomicIntegerArray.length());//2.将下标i的值设置为 newValue,并且返回旧的值 getAndSetSystem.out.println("方法2");System.out.println(atomicIntegerArray.getAndSet(0,1));System.out.println(atomicIntegerArray.get(0));//3.进行CAS操作,比较修改compareAndSetSystem.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

转载于:https://www.cnblogs.com/anxbb/p/8668869.html

4.4.6 数组也能无锁:AtomicIntegerArray相关推荐

  1. 【实战Java高并发程序设计6】挑战无锁算法

    我们已经比较完整得介绍了有关无锁的概念和使用方法.相对于有锁的方法,使用无锁的方式编程更加考验一个程序员的耐心和智力.但是,无锁带来的好处也是显而易见的,第一,在高并发的情况下,它比有锁的程序拥有更好 ...

  2. 基于数组的无锁队列(译)

    2019独角兽企业重金招聘Python工程师标准>>> 1 引言 最近对于注重性能的应用程序,我们有了一种能显著提高程序性能的选择:多线程.线程的概念实际上已经存在了很长时间.在过去 ...

  3. CAS无锁队列的实现

    文章目录 1. 基本原理 2. 代码实现 2.1 使用链表实现无锁队列 2.2 使用数组实现环形无锁队列 3. ABA 问题及解决 4. 参考资料 1. 基本原理 源于1994年10月发表在国际并行与 ...

  4. 即时通讯软件 的无锁数组操作

    多线程下使用数组保存数据,必须先对数组进行加锁,本文介绍 即时通讯软件 的无锁数组操作. 在之前的两篇博客(线程安全的无锁RingBuffer的实现,多个写线程一个读线程的无锁队列实现)中,分别写了在 ...

  5. 无锁数据结构--理解CAS、ABA、环形数组

    在分布式系统中经常会使用到共享内存,然后多个进程并行读写同一块共享内存,这样就会造成并发冲突的问题, 一般的常规做法是加锁,但是锁对性能的影响非常大. 无锁队列是一个非常经典的并行计算数据结构,它极大 ...

  6. 你应该知道的高性能无锁队列Disruptor

    1.何为队列 听到队列相信大家对其并不陌生,在我们现实生活中队列随处可见,去超市结账,你会看见大家都会一排排的站得好好的,等待结账,为什么要站得一排排的,你想象一下大家都没有素质,一窝蜂的上去结账,不 ...

  7. Java并发编程,无锁CAS与Unsafe类及其并发包Atomic

    为什么80%的码农都做不了架构师?>>>    我们曾经详谈过有锁并发的典型代表synchronized关键字,通过该关键字可以控制并发执行过程中有且只有一个线程可以访问共享资源,其 ...

  8. linux 无锁队列覆盖问题,无锁队列杂谈

    质量最大vczh粉(402740419) 10:13:17 nobody(1575393351)  10:10:09 无锁队列,怎么可能 ? 质量最大vczh粉(402740419) 10:13:23 ...

  9. 多线程:无锁、偏向锁、轻量锁、重量级锁

    一:java多线程互斥,和java多线程引入偏向锁和轻量级锁的原因? --->synchronized的重量级别的锁,就是在线程运行到该代码块的时候,让程序的运行级别从用户态切换到内核态,把所有 ...

最新文章

  1. 2021年春季学期-信号与系统-第三次作业参考答案-第四道题
  2. 年度总结和计划:去年4个1,今年5个1
  3. 陕西省计算机等级考试试题库,2015陕西省计算机等级考试二级最新考试试题库...
  4. 程序员面试题精选100题(31)-从尾到头输出链表[数据结构]
  5. Tensorflow报错_np_qint8 = np.dtype([(“qint8“, np.int8, 1)])
  6. hashmap删除指定key_Java集合:HashMap底层实现和原理(源码解析)
  7. 物联网、大数据、云计算、人工智能之间的关系
  8. 主动降噪技术matlab,主动降噪技术(ANC)的前生今世--原理仿真
  9. pdman 创建表同步数据库_PDMan-2.0 正式发布:用心开源,免费的国产数据库建模工具PowerDesigner...
  10. 怎么取消计算机文件共享,Win10系统怎么取消文件共享
  11. 阿里云访问控制简要说明
  12. c++直角空心三角形_2019秋人教版八年级数学上册三角形教材全解读
  13. 过程控制工程,离子膜烧碱一次盐水精制的膜过滤器压力控制
  14. 如何将excel三列数据合为一列日期数据
  15. 自控原理学习笔记-反馈控制系统的动态模型(4)-频率特性函数Nyquist图及Bode图
  16. 一种即时通信数据传输方法、客户端、服务器及系统
  17. 国内外云服务现状及发展探讨
  18. 数据分析--分类与回归模型(一)
  19. 【强化学习】双深度Q网络(DDQN)求解倒立摆问题 + Pytorch代码实战
  20. 高级工程师面试 - 其他

热门文章

  1. 未能加载文件或程序集Microsoft.VisualStudio.Web.PageInspector.Loader
  2. R语言blotter包回测实例
  3. 消费金融资金断流,银行抽贷、通道暂停,P2P离场
  4. notepad++与ISE/Vivado关联
  5. 草原深处的“那达慕”
  6. GPU Gems1 - 17 环境遮挡
  7. 3D人脸重建——PRNet网络输出的理解
  8. 【matlab函数】convn多维卷积
  9. Python中的除法保留两位小数
  10. ZDOzMRVAOq