文章目录
一、CAS
CAS (Compare And Swap的缩写) 算法是在设计并发程序时常用的一个算法。通常情况下, CAS 算法接收两个入参,一个期望值,一个修改值,如果期望值与实际值相同,那么将修改值赋予指定值。听起来CAS算法很复杂,实际上当你理解它之后就变得非常简单。
在JUC提供的Lock的实现类中,大量的使用了CAS算法,比如ReentrantLock,大致算法如下:
public void compareAndSwap(int expect, int update) {
if (actual == expect) {
actual = update;
}
}
CAS 是一种原子操作,保证了在并发情况下是线程安全的。CAS 的具体操作是比较和替换,首先比较指定值和期望值是否一致,若一致则将修改值赋予指定值。
Java 中,sun.misc.Unsafe 类提供了一系列 compareAndSwap 函数。