Compare And Swap,比较交换。可以看到 synchronized 可以保证代码块原子性,很多时候会引起性能问题,volatile也是个不错的选择,但是volatile 不能保证原子性,只能在某些场合下使用。所以可以通过 CAS 来进行同步,保证原子性。
我们在读 Concurrent 包下的类的源码时,发现无论是 ReentrantLock 内部的 AQS,还是各种 Atomic 开头的原子类,内部都应用到了 CAS。
在 CAS 中有三个参数:内存值 V、旧的预期值 A、要更新的值 B ,当且仅当内存值 V 的值等于旧的预期值 A 时,才会将内存值 V 的值修改为 B,否则什么都不干。
CAS 可以保证一次的读-改-写操作是原子操作。
在多线程环境下,int 类型的自增操作不是原子的,线程不安全,可以使用 AtomicInteger 代替。
标签:CAS,AtomicInteger,原子,int,内存,多线程 From: https://www.cnblogs.com/xfeiyun/p/17233085.html