CAS是英文单词Compare And Swap的缩写,也就是比较并替换。
CAS机制规定:
当一个线程对一个变量进行操作时,会创建三个操作数保存该变量的信息,也就是内存地址V,变量原来的值A,要修改的新值B。当该线程对变量操作完毕要把新值保存到变量之前,会先比较A与内存地址V中当前的实际值是否相等,相等才能将变量的值更新为新值B,否则提交失败,并重新尝试。这个重新尝试的过程被称为自旋。
CAS机制与Synchronized的区别:
①CAS机制属于乐观锁,乐观的认为程序中的并发情况不那么严重,所
以让线程不断进行尝试。
②而Synchronized属于悲观锁,悲观的认为程序中的并发情况严重,所
以对于每一个操作都严防死守。它会让没有得到锁资源的线程进入阻塞
态,当在争夺到锁资源后恢复为就绪态,这个过程涉及到操作系统用户
模式和内核模式的状态,代价比较高。
CAS机制的缺点:
①CPU开销较大,不适合用于写操作并发量高的场景。
②只能保证一个变量的原子性操作,无法保证整个代码块或者说多个变
量的原子性。