也来谈幂等和CAS
什么是幂等?
一个方法,不管你执行多少次,保证执行的结果总是相同的。这种方法或者服务就是幂等的。
什么是CAS?
CAS是Compare And Set的缩写,顾名思义,就是先比较再设置,这种方式避免读写时的锁操作。一般配合重试操作。
这两个名词在软件开发的过程中经常会碰到,幂等的操作需要使用到合理的参数,保证幂等参数的唯一性。一般的情况下,方法调用的关键参数都可以作为幂等的条件。而CAS最为常见的就是数据库中使用的乐观锁,用来保证数据的一致性。
幂等的方法和CAS该怎么写呢?看下面的代码
public class Idempotent{
private volatile int a = 0;
public int getAValue(int value){
if(a=0){
a = value + 1;
}
return a;
}
public void setAValueByVersion(int value,int oldValue){
if(a==oldValue){
a = value;
}
}
}
当然,这个代码是存在并发问题的,我们姑且放过。主要表达下幂等和CAS的含义。
我们先看setAValue的方法,这个方法传入了一个参数value,但是方法对a进行了判断,如果a = 0才对a进行赋值,我们撇开并发问题,这个方法不管执行多少次,同样的value参数,返回的结果都是同一个。这也可以衍生到我们平时的编码中,在编码时,写幂等方法时一般先判断是否已经有处理相关的业务,如果有处理,直接返回结果。
第二个方法是CAS的例子,当a的值与传递的oldvalue的值相等是,a的值才会被设置为新的值,否则不处理。
也来谈幂等和CAS的更多相关文章
- [技术]浅谈OI中矩阵快速幂的用法
前言 矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中,矩阵的运算是数值分析领域的重要问题. 基本介绍 (该部分为入门向,非入门选手可以跳过) 由 m行n列元素排列成的矩形阵列.矩阵里的 ...
- 浅谈CAS(Compare and Swap) 原理
浅谈CAS原理java并发编程也研究了一段时间了,对CAS的原理总是不太理解,今天再研究了一下,记录一些自己的理解. 说到CAS,再java中的某些情况下,甚至jdk1.5以后的大多数情况,并发 ...
- CAS+SSO原理浅谈
http://www.cnblogs.com/yonsin/archive/2009/08/29/1556423.htmlSSO 是一个非常大的主题,我对这个主题有着深深的感受,自从广州 UserGr ...
- 如何用一个语句判断一个整数是不是二的整数次幂——从一道简单的面试题浅谈C语言的类型提升(type promotion)
最近招聘季,看JULY大哥的面试100题时,碰到这么一个扩展问题: 如何用一个语句判断一个整数是不是二的整数次幂?(此题在编程之美也有) easy, 2的整数次幂的二进制形式只有一个1,只要用i和i- ...
- JAVA CAS原理浅谈
java.util.concurrent包完全建立在CAS之上的,没有CAS就不会有此包.可见CAS的重要性. CAS CAS:Compare and Swap, 翻译成比较并交换. java.uti ...
- 浅谈 CAS
CAS: CAS:Compare and Swap, 翻译成比较并交换. java.util.concurrent包中借助CAS实现了区别于 synchronized 同步锁的一种乐观锁. CAS应用 ...
- HashMap,ConcurrentHashMap原理。Collection(list,set,map集合区别)。和CAS
collection里面有什么子类?(list和set是实现了collection接口的.) List: 1.可以允许重复的对象(可重复,有序集合).2.可以插入多个null元素.3.常用的实现类有 ...
- 谈一下关于CQRS架构如何实现高性能
CQRS架构简介 前不久,看到博客园一位园友写了一篇文章,其中的观点是,要想高性能,需要尽量:避开网络开销(IO),避开海量数据,避开资源争夺.对于这3点,我觉得很有道理.所以也想谈一下,CQRS架构 ...
- 浅谈JS之AJAX
0x00:什么是Ajax? Ajax是Asynchronous Javascript And Xml 的缩写(异步javascript及xml),Ajax是使用javascript在浏览器后台操作HT ...
随机推荐
- LVM卷组命令
一般维护命令 #vgscan //检測系统中全部磁盘 #vgck [卷组名] //用于检查卷组中卷组描写叙述区域信息的一致性. #vgdisplay [卷组名] //显示卷组的属性信息 #vg ...
- LINQ使用与并行
LINQ介绍 參考:https://msdn.microsoft.com/en-us/library/bb397906.aspx LINQ查询主要运行操作包含:1)获取数据源:2)创建查询:3)运行查 ...
- iOS 渐变色实现,渐变色圆环,圆环进度条
CAGradientLayer图层可以通过设置mask来给视图添加渐变效果 CAGradientLayer主要需要设置一下几个参数 colors:传入需要渐变的颜色 例如 self.gradientL ...
- Weka关联规则分析
购物篮分析: Apriori算法: 参数设置: 1.car 如果设为真,则会挖掘类关联规则而不是全局关联规则. 2. classindex 类属性索引.如果设置为-1,最后的属性被当做类属性. 3. ...
- 内核initcall分析
linux中init相关内容定义在include/linux/init.h initcall相关定义 先看下文件说明,此文件定义的宏主要用于初始化阶段标记函数或初始化数据,之后占用的资源会被释放掉. ...
- JS Map对象
java和C#等高级语言中都有map这样的键值对,但是js里没有,我们需要这样的,该怎么做呢? 可以自己使用function封装一个map对象,如下所示 function Map() { this.k ...
- 几种session存储方式比较
原文: http://blog.sina.com.cn/s/blog_495697e6010143tj.html 集群中session安全和同步是个最大的问题,下面是我收集到的几种session同步的 ...
- c_str()方法使用
语法: const char *c_str(); c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过 ...
- K-Piggy-Bank
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- json-lib-2.5-jdk.jar 需要依赖的jar包
commons-lang3-3.1.jar commons-lang-2.5.jar ezmorph-1.0.6.jar commons-collections-3.2.1.jar commons-b ...