Java实现乐观锁CAS

乐观锁不是一种锁,而是一种编程思想,指的是更新值的时候采用CAS的机制,CAS过程是原子的

1、使用synchronized实现

public class MyCAS {
    volatile private int count;

    public boolean compareAndSet(int expect, int update){
        if(expect==getCount()){//1、比较期望值与当前值是否相等,不相等直接返回false
            synchronized (this){//2、进行CAS原子操作
                if(expect==getCount()){
                    count=update;//3、与期望值相等,把当前值改成更新后的值
                }
            }
        }
        return false;
    }

    public int getAndSetInt(int expect, int update){
        int var;
        do {
            var=getCount();
        }while (!this.compareAndSet(var,update));
        return var;
    }

    public int getCount() {
        return count;
    }
}

总结:
1、可以看出使用synchronized实现的CAS有点类似DCL单例模式,所以说编程是相通的,重要的是思想

2、Java底层的CAS使用的是Unsafe类,汇编原语是cmpxchg,多核环境下会锁总线

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值