概念
CAS是英文单词CompareAndSwap的缩写,中文意思是:比较并替换。CAS需要有三个操作数:内存地址V,旧的预期值A,即将要更新的目标值B。
CAS指令执行时,当且仅当内存地址V的值与预期值A相等的时,将内存地址V的值修改为B,否则就什么都不做。整个比较并替换的操作是一个原子操作。
可以简单理解为一个无阻塞的多线程争抢资源的模型,在不满足CAS执行条件时,将一直进行自旋(即重新尝试)。
CAS是乐观锁,Synchronzied关键字是悲观锁。
CAS缺点
- CPU开销较大
在并发量比较高的情况下,如果许多线程反复尝试更新某一个变量,却又一直更新不成功,循环往复,会给CPU带来很大的压力。
- 不能保证代码块的原子性
CAS机制所保证的知识一个一个变量的原子性操作,而不能保证整个代码块的原子性。比如需要保证3个变量共同进行原子性的更新,就不得不使用Synchronzied。