什么是CAS简单介绍
CAS是compare and swap的缩写,即我们所说的比较交换。
cas是一种基于锁的操作,而且是乐观锁。在java中锁分为乐观锁和悲观锁。悲观锁是将资源锁住,等一个之前获得锁的线程释放锁之后,下一个线程才可以访问。而乐观锁采取了一种宽泛的态度,通过某种方式不加锁来处理资源,比如通过给记录加version来获取数据,性能较悲观锁有很大的提高。
CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存地址里面的值和A的值是一样的,那么就将内存里面的值更新成B。CAS是通过无限循环来获取数据的,若果在第一轮循环中,a线程获取地址里面的值被b线程修改了,那么a线程需要自旋,到下次循环才有可能机会执行。
java.util.concurrent.atomic 包下的类大多是使用CAS操作来实现的( AtomicInteger,AtomicBoolean,AtomicLong)。
CAS存在问题:
效率问题:前面提到,如果存在多个线程竞争,可能导致CAS失败,此时可能需要循环(自旋)执行CAS,竞争激烈情况下会对性能有一定影响;
ABA问题:CAS过程中其他线程把变量从A改成B,然后又改回A,CAS判断值没变于是执行更新操作,但事实上值是被修改了的,与设计原语不符,atomic包引入AtomicStampReference类解决ABA问题,每次变量更新的时候,将变量的版本号+1,之前的ABA问题中,变量经过两次操作以后,变量的版本号就会由1变成3,也就是说只要线程对变量进行过操作,变量的版本号就会发生更改,从而解决了ABA问题;但实际应用中ABA问题如果对业务逻辑不会造成影响,可以忽略;
什么是CAS简单介绍相关推荐
- CAS单点登录原理简单介绍
1. SSO简介 1.1 单点登录定义 单点登录(Single sign on),英文名称缩写SSO,SSO的意思就是在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统. ...
- 遗传算法的简单介绍以及模式定理的简单证明
遗传算法 遗传算法(Genetic Algorithm,GA),最早是由美国的John holland在20世纪70年代提出.算法通过模拟达尔文生物进化论的自然选择以及遗传学机理的生物进化过程来搜 ...
- 2021年大数据ELK(十八):Beats 简单介绍和FileBeat工作原理
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Beats 简单介绍和FileBeat工作原理 一.Beats 二.FileB ...
- 2021年大数据ELK(十五):Elasticsearch SQL简单介绍
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch SQL简单介绍 一.SQL与Elasticsear ...
- 2021年大数据ELK(二):Elasticsearch简单介绍
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 一.Elasticsearch简介 1.介绍 2.创始人 二.E ...
- iOS开发UI篇—多控制器和导航控制器简单介绍
iOS开发UI篇-多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...
- 简单介绍一下R中的几种统计分布及常用模型
统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...
- LVS(Linux Virtual Server)三种负载均衡模型和十种调度的简单介绍
LVS(Linux Virtual Server)三种负载均衡模型和十种调度的简单介绍 LVS (Linux Virtual Server) LVS(Linux Virtual Server)其实就是 ...
- dubbo学习过程、使用经验分享及实现原理简单介绍
一.前言 部门去年年中开始各种改造,第一步是模块服务化,这边初选dubbo试用在一些非重要模块上,慢慢引入到一些稍微重要的功能上,半年时间,学习过程及线上使用遇到的些问题在此总结下. 整理这篇文章差不 ...
最新文章
- 什么原数据更容易平稳_【时间序列】-航空数据预测
- 存在于实数域的微观粒子7-神经网络与电磁场
- 使用Angular依赖注入自定义SAP Spartacus的ProductAdapter
- 打开端口_打印机ip及端口设置
- 蓝色巨人IBM全力奔赴的混合云之旅能顺利吗?
- 点亮两个发光管用c语言编辑,第二个试验:用单片机点亮一个闪烁的发光管-----51单片机汇编语言试验教程 - CSDN博客...
- 函数指针的定义和函数指针数组
- 学考计算机删除键是什么字母,考计算机的童鞋注意啦~计算机基础题答案~
- updatepanel失效怎么办_[转]jquery与updatepanel二次失效问题解决方案-阿里云开发者社区...
- 【基础教程】基于matlab图像增强+复原+分割【含Matlab源码 056期】
- 【2】基于深度神经网络的脑电睡眠分期方法研究(标签导入)
- 电子词典系统vc++_MFC 电子词典
- python requests ssl 证书问题
- ThinkPad L450加装固态硬盘教程
- python简单小游戏代码教程,python小游戏程序源代码
- 相关分析-5种常用相关分析方法
- Vmware Ubuntu实现文件拖拽
- Ubuntu 12.04硬盘安装与U盘安装(图文)
- TCP/UDP网络的通信
- 8,verilog基本逻辑运算
热门文章
- arcgis怎么关联excel表_arcgis中如何跟excel连接?
- 2.1.1计算机网络(奈氏准则 香农定理 码元 速率 波特 带宽 物理层概念 通信方式 传输方式)
- Mysql查看表的数据量
- VOC2012数据集的探索性数据分析(EDA)
- Java 反射和映射(主要描述下反射)
- winhex中判断+MBR+DBR+EBR方法
- GridControl 单元格自动换行
- FCN全卷积网络和Deconv转置卷积原理描述
- 关于基线版本、基线那点事儿
- 图解排序算法及实现——快速排序 (Quick Sort)