CAS原理与JUC原子类

一、CAS基本原理

1、Unsafe类

(1)概念及作用:增强Java语言操作底层资源的能力,里面的方法多为native修饰的方法(基于C++实现),不建议在代码中使用,不安全。

(2)底层原理:Unsafe类提供的CAS方法,直接通过native方式(通过指针直接操作内存),调用了底层的CPU指令cmpxchg(原子指令)。

(3)使用:类被final修饰,构造方法是私有的,因此不能外部实例化,只能通过反射调用。

Field theUnsafe=Unsafe.class.getDeclaredField("theUnsafe");
//private static final Unsafe theUnsafe; 

2、CAS

(1)比较并交换 CompareAndSwap

CAS(字段内存位置,预期值,新值)

取出内存位置的值,与预期值比较,若相同则设置为新值

do{
获得字段的预期值(oldValue)
计算出需要替换的新值(newValue)
}while(!CAS(内存地址,oldValue,newValue))
//注意oldValue的值在不断的更新

二、JUC原子类

(1)AtomicXXX

具体例子:

JUC并发编程DAY08-CSDN博客

(2)存在的问题:

ABA问题

1线程操作变量A,2线程修改为B,在1线程发现前又修改为A。

三、LongAdder

以空间换时间、热点分离

将value值分离成一个数组,获取最终的value时,则将数组的元素求和。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值