CAS

cas

cas是检查并替换。

原理: 两个线程同时访问主内存,这时主内存的共享变量是3,线程1拿取到3,但是这时开始GC,线程1挂起。这时线程2到来,线程二也在主内存中拿去到3,并对主内存的3进行修改,变成4。线程1这时结束挂起。再来主内存替换时,发现原值已经被替换。那么他会从头再来一次,拿取到4,进行操作。直到他拿到的值,在替换的时候和主内存的值相同时,才进行替换。只就是CAS原理

保证原子性

1.cas保证原子性,但是不能解决ABA的问题

2.Synchorized保证原子性: java还提供了lock和unlock来保证原子性,但是没有将lock和unlock直接开放给用户使用,但是提供了,更高级的字节码指令,monitorenter和monitorexit来隐式使用者两个操作。这两科执行在synchronized块之间操作具备原子性。

Synchronized保证三大特性(原子性,可见性,有序性)

1.synchronized 保证原子性的原理
对 number++;增加同步代码快,保证同一时间只有一个线程操作 number++;。就不会出现安全问题;

2.synchronized 保证可见性的原理,执行 synchronized时,会对应执行 lock 原子操作会刷新工作内存中共享变量的值;

3.as-if-serial语义的意思是:不管编译器和CPU如何重排序,必须保证单线程情况下程序的结果是正确的;

关键字跟三大特征的关系

https://oss-jgd.oss-cn-chengdu.aliyuncs.com/F352FAFC-A276-411c-BF42-9A2A15FE9746.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值