一、CAS的概念:比较并交换
CAS(Compare And Swap)指比较并交换。CAS算法CAS(V, E, N)包含3个参数,V表示内存里的值,E表示传入的值,N表示新值。
在且仅在V值等于 E值时,才会将V值设为 N,如果 V值和 E值不同,则说明已经有其他线程做了更新,当前线程什么都不做。
最后,CAS返回当前V的真实值。
二、CAS的特性:乐观锁
CAS操作采用了乐观锁的思想,总是认为自己可以成功完成操作。
在有多个线程同时使用CAS操作一个变量时,只有一个会胜出并成功更新,其余均会失败。失败的线程不会被挂起,仅被告知失败,并且允许再次尝试,当然,也允许失败的线程放弃操作
基于这样的原理,CAS操作即使没有锁,也可以发现其他线程对当前线程的干扰,并进行恰当的处理。
三、CAS自旋等待
在JDK的原子包