Java中的CAS
CAS全称 Compare And Swap(比较与交换),是一种无锁算法。在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步,java.util.concurrent包中的原子类就是通过CAS来实现了乐观锁。
基本介绍
CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。
使用场景
有的时候我们需要对变量进行操作,如果是多线程,则有可能达不到我们的预期结果,Synchronized
等关键字,可以解决问题,但是Synchronized
关键字会让没有得到锁资源的线程进入BLOCKED状态,而后在争夺到锁资源后恢复为RUNNABLE状态,这个过程中涉及到操作系统用户模式和内核模式的转换,代价比较高。这个时候我们就可以使用Atomic的一些原子操作来进行。
public class CASTest {
public static volatile int count = 0;
public static AtomicInteger atomicCount = new AtomicInteger();
public static void main(String[] args