CAS的全称是: Compare And Swap(比较再交换
),它体现的一种乐观锁
的思想,在无锁情况
下保证线程操作共享数据的原子性。
CAS数据交换流程:
- 此时线程A和线程B都从主内存中拷贝了一份a=100的共享变量到自己的工作内存中
- 线程A操作了变量a执行了++操作,此时a==101
- 此时会进行CAS操作,也就是比对线程操作前(执行了++操作)的a和主内存中的a对比,如果相等,则直接修改主内存的i值为101,返回true,否则返回false
- 此时线程B也做了–操作,此时a==99,然后对比操作前的i和现在主内存的i,发现不相等。此时就会触发自旋操作。
自旋操作也就是从新从主内存拷贝一份i的数据到线程B的工作内存区,然后执行a–操作,此时a==100,在对比操作前的数据和主内存的数据是否相等,结果明显相等,则直接将操作后的数据更新回主内存覆盖原来的a