目录
CAS是什么
CAS(Compare and Swap,比较并交换)是一种并发编程中的原子操作,用于实现多线程环境下的无锁同步。它是一种乐观锁策略,通过比较内存中的值与期望值是否相等来决定是否更新内存中的值。
CAS操作通常包括三个参数:内存地址(或者说是变量的引用)、期望值和新值。操作过程如下:
- 读取内存地址中的当前值(旧值);
- 比较旧值与期望值是否相等,如果相等则将新值写入内存地址;
- 如果不相等,则说明其他线程已经修改了内存值,操作失败。
如果操作失败,CAS会重新读取内存中的当前值,并再次尝试进行比较和交换,直到成功为止。
CAS操作具有原子性,也就是在执行CAS时,其他线程无法修改内存中的值。这使得CAS成为实现线程安全的关键技术之一。它避免了传统锁机制中的竞争和阻塞,提高了并发性能。在Java中,CAS操作常常通过java.util.concurrent.atomic包中的AtomicInteger、AtomicLong等原子类来实现。这些原子类封装了CAS相关的操作,方便开发者进行无锁编程。
例子
在内存地址V当中,存储着值为10的变量。此时线程1想要把变量的值增加1。对线程1来说,旧的预期值A=10,要修改的新值B=11。但是在线程1要提交更新之前,另一个线程2抢先一步,把内存地址V中的变量值率先更新成了11。此时线程1开