CAS是乐观锁的一种实现。CAS是Compare And Swap的缩写,是一种高效的处理并发的机制,说他高效是由于CAS是cpu的一个指令,能够在指令层面上来进行操做(非CPU指令操做须要多个CPU指令组合才可以完成功能,因此效率有影响);至于并发处理,是由于CAS操做首先是一个原子操做(CPU指令已经确立了原子地位),其次CAS有三个参数:V,E,N,首先Compare一下,变量V的值是否和E相同,若是相同则更新为值N,若是不相同则须要从新获取,作逻辑判断再更新。数据库
首先咱们讲一下乐观锁,乐观锁是一种“读多写少”场景的假设。因此会有ABA的问题,好比有两个线程:线程1,线程2;线程1讲数据(原始为A)改成B,后来又改成A;线程2读取发现是A,就认为数据并无修改,继续对数据进行修改成B。并发
乐观锁/ 悲观锁在技术层面的实现为:函数
数据库:乐观锁, verseion字段判断;悲观锁,select ...for update;post
JVM:乐观锁,CAS;悲观锁:sync/reentrylock;线程
CAS在Java中具体应用就是原子类,好比AtomicInteger里面的“getAndAccumulate"函数,就是经过轮训的方式来尝试修改;这个也说明了CAS主要用于读多写少的场景,由于若是大量的并发修改将会致使CAS的屡次轮训get
参考:io