网站上面图片上传尺寸,如何对网站ftp进行上传,做网站专题模板,小程序搭建怎么赚钱什么是CAS(compare and swap)#xff1f;
CAS#xff08;Compare Set#xff0c;或是 Compare Swap#xff09;#xff0c;即比较并交换#xff0c;也是实现我们平时所说的自旋锁或乐观锁的核心操作。
它的实现很简单#xff0c;就是用一个预期的值和内存…什么是CAS(compare and swap)
CASCompare Set或是 Compare Swap即比较并交换也是实现我们平时所说的自旋锁或乐观锁的核心操作。
它的实现很简单就是用一个预期的值和内存值进行比较如果两个值相等就用预期的值替换内存值并返回 true。否则返回 false。
CAS是线程并发算法时用到的一种技术CAS是原子操作保证并发安全而不是保证并发同步CAS是CPU的一个指令CAS是非阻塞的、轻量级的乐观锁
CAS的原子性是由CPU硬件指令实现保证的即使用JNI调用native方法调用由C编写的硬件级别指令jdk中提供了Unsafe类执行这些操作。
为什么说CAS是乐观锁
乐观锁严格来说并不是锁通过原子性来保证数据的同步比如说数据库的乐观锁通过版本控制来实现等所以CAS不会保证线程同步。乐观的认为在数据更新期间没有其他线程影响
CAS原理
CAS就是将内存值更新为需要的值但是有个条件内存值必须与期望值相同。举个例子期望值 E、内存值M、更新值U当E M的时候将M更新为U。
CAS应用
由于CAS是CPU指令我们只能通过JNI与操作系统交互关于CAS的方法都在sun.misc包下Unsafe的类里 java.util.concurrent.atomic包下的原子类等通过CAS来实现原子操作。
CAS优缺点
优点 非阻塞的轻量级的乐观锁通过CPU指令实现在资源竞争不激烈的情况下性能高相比synchronized重量锁synchronized会进行比较复杂的加锁解锁和唤醒操作。 缺点
ABA问题线程C、D,线程D将A修改为B后又修改为A,此时C线程以为A没有改变过java的原子类AtomicStampedReference通过控制变量值的版本来保证CAS的正确性。自旋时间过长消耗CPU资源如果资源竞争激烈多线程自旋长时间消耗资源。CAS只能保证一个共享变量的原子操作。如果有多个变量就只能采用别的方式如悲观锁
CAS总结
CAS不仅是乐观锁是种思想我们也可以在日常项目中通过类似CAS的操作保证数据安全但并不是所有场合都适合
曾看过帖子说能用synchronized就不要用CAS除非遇到性能瓶颈因为CAS会让代码可读性变差这句话看大家怎么理解了。
拓展 https://www.cnblogs.com/Mainz/p/3546347.html