Cas依赖于Unsafe类中的cpmpareAndSwapInt方法实现原子操作
Unsafe是cas的核心类,java无法直接访问底层操作系统,java的Unsafe类提供了硬件级别的原子操作
valueOffset是变量值在内存中的偏移地址
AtomicInteger静态代码块加载Unsafe工具类,用来直接操作内存,并且用volatile修饰value字段,保证可见性,getAndAddInt()
CAS缺点
ABA问题,只知道对比结果,不知道到底有没有被修改过,可以使用数据库版本号记录修改过程
自旋耗资源
依赖于cpu的原子指令
网友评论