【高频面试题】Cas你知道吗?

一、什么是CAS?

1、比较并交换

AtomicInteger

compareAndSet 如果期望值(主内存的值)与修改值(工作内存的值)相同,则修改;

类似GitHub的提交版本号。

2、CAS的底层原理是什么?

它是一条并发原语。

比较当前工作内存和主内存的值,如果相同则执行规定操作,否则继续直到主内存和工作内存的值一致为止。

CAS应用

CAS中有三个操作数,内存值V,期望值A,要修改的值B。

当且仅当V等于A时,才会将内存中的V替换为B,否则什么都不做。

3、CAS缺点

①getAndAddInt方法执行的时候,有个dowhile方法,

如果CAS失败,会一直尝试,如果CAS 长时间不成功,会给CPU带来很大的开销。

②他只能保证一个共享变量的原子操作。

③ABA问题

产生

CAS实现需要取出内存的数据比较并替换,在这个时间差内会导致数据变化。

如何解决?

原子引用 AtomicReference<?>

时间戳原子引用 AtomicStampedReference - 新增机制,修改版本号(时间戳)

T1 100 1

T2 100 1 101 2 100 3

结果如下:

经验分享 程序员 微信小程序 职场和发展