CAS笔记

引入CAS的原因

1.synchronized争夺同一共享资源时,未获得锁的线程会等待,线程挂起与唤醒需要在用户态和内核态进行切换,影响性能

2.volatile可以保证内存的可见性和指令有序性,但是不能保证原子性

3.映入CAS为了保证原子性并且不影响性能。

CAS原理和特点:

先读取内存中的数据,再通过比较是否符合预期,符合就跟新为新值。其实现是基于硬件提供的原子操作指令,实现无锁并发,提高了效率的同时还保证原子性。

三个关键参数:

V:需要读写的内存地址

E:期望的V的值

N:想要写入的新值

过程:

1.比较V和E是否相等

2.相等,将V跟新成N,否则不做修改

3.返回旧值,可以判断是否成功更新

可能的问题

1.ABA问题

当两个线程同时对同一共享数据进行操作如

线程1:读取1,想要修改成2

线程2:在线程1读取后还未修改时线程2将1改成3有改回1后,线程1才进行修改。此时可能导致数据不一致。

ABA解决

(1).增加版本号

2.长时间自旋:占用大量的CPU资源

解决:JVM提供的pause指令,让cpu在自旋失败时睡眠一段时间再继续自旋。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值