【面试题】能聊聊你对CAS的理解以及其底层实现原理可以吗?

本文探讨了在多线程环境下,如何通过CAS(Compare and Set)解决并发安全问题。CAS操作是原子性的,避免了传统锁机制带来的性能损失。然而,CAS也存在ABA问题、无限循环(自旋)和多变量原子性问题。为解决这些问题,Java并发包提供了AtomicStampedReference和LongAdder等工具类。
摘要由CSDN通过智能技术生成

当多个线程要访问同一个数据时,包括取值、询问、修改时,必然会出现多线程并发安全问题

public class MyObject{
    int i = 0;
    public synchronized void increment(){
        //同一时间,只有一个线程可以进入当前方法
        //在一个对象实例的方法上加synchronized
        i++;
    }
}

调用:
MyObject mo = new MyObject();
mo.increment();

这种加锁的方式是串行化,执行效率不高。多线程情况下,需要排队执行increment方法

 

使用并发包下的AtomicInteger类(底层基于CAS来进行实现)

public class MyObject{
    AtomicInteger i = new AtomicInteger(0);
    public  void increment(){
        //多个线程此时来执行这段代码
        //不需要synchronized加锁,也是线程安全的
        i.incrementAndGet();
    }
}

CAS全称 compare and set,CAS操作是原子的,底层会进行硬件之别的上锁,中间是不可以被打断的

(1)先读取当前值,假设i&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值