CAS是一种多线程并发控制技术,全称是Compare and Swap(比较并交换)。它通过比较内存中的值和预期值的状态,来决定是否执行某个操作,比如更新一个值。在Java中,CAS主要通过java.util.concurrent.atomic包中的类实现。使用CAS可以避免线程阻塞,提高多线程并发操作的效率。CAS的优势主要体现在ABA问题的解决和乐观锁的实现上。
Java中常用的类有AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference等。使用CAS的一般流程为:先获取一个内存位置的当前值、比较它是否等于预期值、如果相等则将新值写入内存位置,否则重新取值再比较直至操作成功。CAS的核心实现是使用了CPU指令集中的cmpxchg指令。
下面是一个简单的示例代码:
AtomicInteger counter = new AtomicInteger();
public void increment() {
int oldValue = counter.get();
int newValue = oldValue + 1;
while (!counter.compareAndSet(oldValue, newValue)) {
oldValue = counter.get();
newValue = oldValue + 1;
}
}
在该示例中,使用AtomicInteger类来保证多线程对counter变量的安全访问,increment()方法使用了CAS来实现counter值的自增操作。
参考文章:https://www.cnblogs.com/c2014/p/5790506.html