定义

CAS:Compare and Swap

其中在java中使用CAS底层借助 Unsafe 来操作,实现非阻塞的修改变量值,CAS是使用了硬件指令保证原子性
每次进行compareAndSwap方法时,需要cas有3个参数
内存地址V
旧的预期值E
要修改的新值N

  • E == V 时,修改 V 值为 N,返回true
  • E != V 时,修改失败,返回false

AtomicBoolean,AtomicInteger,AtomicLong 等都是使用CAS来实现的。但是没有解决ABA问题。

什么是ABA问题

一个线程获取值为a,另一个线程将数值由a改成了b,接着又改成了a,此时线程b的CAS操作认为是没有变化,但其实已经变化过了,这种过程就叫ABA问题。

CAS的ABA问题解决

可以使用版本号标志,每当修改操作一次版本号加1,这样比较时候,不管比较值还比较了版本号。但是在java5中,已经提供了AtomicStampedReference

import java.util.concurrent.atomic.AtomicStampedReference;public class Test {private static AtomicStampedReference atomicStampedReference = new AtomicStampedReference(100, 0);public static void main(String[] args) {while (!incr()) {}}private static boolean incr() {int stamp = atomicStampedReference.getStamp();return atomicStampedReference.compareAndSet(100, 101, stamp, stamp + 1);}
}

CAS缺点

  1. 循环时间长,开销很大:就是如果CAS失效,就会一直进行尝试,当时间过长仍然失败,那么就会给CPU带来很大的开销
  2. 不能保证代码块的原子性,只能保证变量的原子性操作
  3. ABA问题

Java中CAS操作相关推荐

  1. Java中CAS操作本身怎么保证原子性及其原理分析

    Java中CAS操作是怎么保证原子性的? 在学习Java多线程时我们会接触到CAS这样一个概念,CAS其实就是Compare And Swap的一个缩写.Compare And Swap,顾名思义就是 ...

  2. Java中CAS操作详解

    在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问题. (2 ...

  3. 什么是java中CAS

    本篇的思路是先阐明无锁执行者CAS的核心算法原理然后分析Java执行CAS的实践者Unsafe类,该类中的方法都是native修饰的,因此我们会以说明方法作用为主介绍Unsafe类,最后再介绍并发包中 ...

  4. Java中CAS详解

    转载自  Java中CAS详解 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换 ...

  5. Java中CAS(Compare And Swap,比较和交换)算法的技术原理简述

    - title: Java中CAS(Compare And Swap,比较和交换)算法的技术原理简述 - date: 2021/8/14 文章目录 CAS全称 Compare And Swap,是一种 ...

  6. java中文件,java中文件操作大全

    java中文件操作大全 一.获得控制台用户输入的信息 view plaincopy to clipboardprint? / //获得控制台用户输入的信息 return throws ioexcept ...

  7. ant java 返回,在Java中直接操作ant回测试和生成测试报告

    在Java中直接操作ant来测试和生成测试报告 Ant是大家熟悉的构建工具,一般情况下,大家都是使用build.xml文件来配置使用Ant,这样的Ant已经是十分强大的.但有些怪异的场景需求特殊,你可 ...

  8. Handle table中CAS操作与A-B-A Problem解析

    在研究handle table的时候顺便研究的东西.Baidu了下,发现国内这方面的资料几乎没得,然后就准备瞎bb下,为下面的一篇介绍handle table的结构做准备. 关于lock-free d ...

  9. Java中文件操作和IO

    目录 一.文件 1.1 文件的概念 1.2 文件的路径 1.2.1 绝对路径 1.2.2 相对路径 1.3 文件的分类 二.Java中操作文件 案例1 案例2 案例3 案例5 案例6 三.文件的读写- ...

最新文章

  1. Spring 事务管理高级应用难点剖析
  2. CentOS7安装和配置samba
  3. OpenCV像素点处理 1
  4. Git学习(一)git服务器的简易搭建
  5. 一个不错的SQL储存过程分页,储存过程+Repeater,如果只是浏览数据的话,快就一个字...
  6. winform直接控制云台_速学指南,2分钟学会Feiyu pocket口袋云台的隐藏功能操作
  7. 【渝粤教育】 国家开放大学2020年春季 1050金融理论前沿课题 参考试题
  8. 调查显示:数据中心行业女性获得报酬比男性多
  9. Java通过 p12 建立ssl链接
  10. dict字典,以及字典的一些基本应用
  11. 内大考研计算机专业课,2019计算机考研专业课核心考点梳理
  12. webview的使用套餐
  13. MTK FM收音机修改门限减少杂台
  14. 计算机显示无法格式化,计算机格式化SD卡提示Windows无法完成格式化解决方法
  15. SQL之正则表达式的简单使用
  16. ImageAI训练自定义数据总结
  17. Python:雷达图的实现
  18. Guitar Pro 的木吉他音色改成电吉他音色的方法
  19. 达内python第一次月考题目_第一次月考作文六篇
  20. 那些爆火的游戏背后,是如何让你一步一步上瘾的?

热门文章

  1. 3D游戏建模入行难吗?怎么学比较靠谱
  2. 光学液氮恒温器T9120-4W的技术参数
  3. 老电脑装Win11的步骤
  4. 北京理工大学计算机学院研究生招生官网,李元章 - 北京理工大学 - 计算机学院...
  5. 四川大学计算机导论吴承恩,计算机导论 李明东.pdf
  6. 2021-09-03 win11 任务栏卡死空白 问题解决 亲测好用
  7. IT互联网行业应届生求职杂谈
  8. OpenCV - 训练分类器
  9. vue3学习(引入轮播图插件)
  10. u盘启动盘制作工具哪个最好用?