java学习记录---CAS乐观锁
CAS,全称 Compare And Swap (比较与交换),是一种乐观锁,同样是锁相比 synchronized 性能却要高不少,因为是 synchronized 阻塞的,而CAS是非阻塞的。CAS主要有3个操作数,内存值V,预期的旧值A,需要修改的新值B,可以这样理解:在V的地址把A改成B,当V位置的值与预期的旧值A相同时候,则修改成B,否则不更新。 下面看个图简单理解一下CAS:当线程1和线程2同时操作内存V,线程1想要把内存V的变量值从A(2)改成B(1)而线程2想要把V的变量值从A(2)改成B(3)。假设这个时候是线程1优先抢到资源所以线程1先进行CAS操作,这个时候预期旧值2是相等的则执行了更新,更新完后内存V的变量值就变成1,这个时候线程2才进入比较预期的A值与V中实际的变量值已经不相同了,所以更新失败。 这个图看上去是 Compare And Swap 是同时操作,但实际上是分2部执行:1.比较(compare),2.交换(swap),它的原子性是通过硬件实现的,而不是我们java代码实现 java提供的CAS操作类 我们随便找其中一个Atomic类学习 当V的值与A相等则更新成功 public static void main(String[] args) { // 定义 Integer 的 CAS 类 AtomicInteger AI = new