Java中CAS操作
定义
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缺点
- 循环时间长,开销很大:就是如果CAS失效,就会一直进行尝试,当时间过长仍然失败,那么就会给CPU带来很大的开销
- 不能保证代码块的原子性,只能保证变量的原子性操作
- ABA问题
Java中CAS操作相关推荐
- Java中CAS操作本身怎么保证原子性及其原理分析
Java中CAS操作是怎么保证原子性的? 在学习Java多线程时我们会接触到CAS这样一个概念,CAS其实就是Compare And Swap的一个缩写.Compare And Swap,顾名思义就是 ...
- Java中CAS操作详解
在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问题. (2 ...
- 什么是java中CAS
本篇的思路是先阐明无锁执行者CAS的核心算法原理然后分析Java执行CAS的实践者Unsafe类,该类中的方法都是native修饰的,因此我们会以说明方法作用为主介绍Unsafe类,最后再介绍并发包中 ...
- Java中CAS详解
转载自 Java中CAS详解 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换 ...
- Java中CAS(Compare And Swap,比较和交换)算法的技术原理简述
- title: Java中CAS(Compare And Swap,比较和交换)算法的技术原理简述 - date: 2021/8/14 文章目录 CAS全称 Compare And Swap,是一种 ...
- java中文件,java中文件操作大全
java中文件操作大全 一.获得控制台用户输入的信息 view plaincopy to clipboardprint? / //获得控制台用户输入的信息 return throws ioexcept ...
- ant java 返回,在Java中直接操作ant回测试和生成测试报告
在Java中直接操作ant来测试和生成测试报告 Ant是大家熟悉的构建工具,一般情况下,大家都是使用build.xml文件来配置使用Ant,这样的Ant已经是十分强大的.但有些怪异的场景需求特殊,你可 ...
- Handle table中CAS操作与A-B-A Problem解析
在研究handle table的时候顺便研究的东西.Baidu了下,发现国内这方面的资料几乎没得,然后就准备瞎bb下,为下面的一篇介绍handle table的结构做准备. 关于lock-free d ...
- Java中文件操作和IO
目录 一.文件 1.1 文件的概念 1.2 文件的路径 1.2.1 绝对路径 1.2.2 相对路径 1.3 文件的分类 二.Java中操作文件 案例1 案例2 案例3 案例5 案例6 三.文件的读写- ...
最新文章
- Spring 事务管理高级应用难点剖析
- CentOS7安装和配置samba
- OpenCV像素点处理 1
- Git学习(一)git服务器的简易搭建
- 一个不错的SQL储存过程分页,储存过程+Repeater,如果只是浏览数据的话,快就一个字...
- winform直接控制云台_速学指南,2分钟学会Feiyu pocket口袋云台的隐藏功能操作
- 【渝粤教育】 国家开放大学2020年春季 1050金融理论前沿课题 参考试题
- 调查显示:数据中心行业女性获得报酬比男性多
- Java通过 p12 建立ssl链接
- dict字典,以及字典的一些基本应用
- 内大考研计算机专业课,2019计算机考研专业课核心考点梳理
- webview的使用套餐
- MTK FM收音机修改门限减少杂台
- 计算机显示无法格式化,计算机格式化SD卡提示Windows无法完成格式化解决方法
- SQL之正则表达式的简单使用
- ImageAI训练自定义数据总结
- Python:雷达图的实现
- Guitar Pro 的木吉他音色改成电吉他音色的方法
- 达内python第一次月考题目_第一次月考作文六篇
- 那些爆火的游戏背后,是如何让你一步一步上瘾的?