最近再读码出高效这本书,在多线并发部分这里多次看到CAS这个词,尤其是在看对ConcurrentHashMap的源码解读中多次提到了。本小节先来学习一下
定义
CAS(Compare And Swap)比较并交换,它是解决轻微冲突的多线程并发场景下使用锁造成性能损耗的一种机制
CAS 算法
CAS包含了3个操作数-需要读写的内存位置V、进行比较的值A和拟写入的新值B,当且仅当V的值等于A时,CAS才会通过原子的方式用新值B来更新V的值,否则不会执行任何操作
如果内存位置的值与预期原值相等,则处理器将该位置的值更新为新值,如果不相等则获取当前值,然后进行不断的轮询操作直到成功或达到某个阈值退出
CAS的典型使用模式
可参照:java并发编程实战264页
JVM 就是利用CAS 在对象头上设置线程 ID, 表示这个对象偏向于当前线程, 这就是偏向锁。