CAS自旋

来源:互联网 发布:maven nexus windows 编辑:程序博客网 时间:2024/05/16 13:06

CAS(Compare And Swap)比较并转换
该算法涉及三个数:内存值V,旧的预期值A,新的预期值B。当且仅当旧的预期值A和内存值V相同时,将内存值改为B,否则什么也不做。
如何来理解上面这一段话呢?我们先了解一下乐观锁和悲观锁各自的做事方式,首先,悲观锁的态度是一件事情我必须要能百分之百掌控才能去做,否则就认为这件事情一定会出问题,而乐观锁的态度就是不管什么事情,我都会先尝试去做,大不了最后不成功就是了。
基于CAS的自旋就是典型的乐观锁,程序执行时,线程1从共享内存中取值V并建一个副本A,对A进行计算后将新的值保存为B,然后对A值和内存中的V值进行比较,如果A等于V,则认为内存中的V值没有被其他线程修改过,可以将新值B赋给内存,否则,认为内存中已被其他的线程修改,则重新执行计算操作和检测,知道旧的期望值A等于内存值V为止。
java并发包java.util.concurrent.*的核心就是CAS自旋原理。如AtomicInteger、AtomicLong等都是基于CAS实现的。

0 0