乐观锁与悲观锁简单了解

这个案例每一次都进行锁得判断,获取锁,最后释放锁,效率非常慢 代码改写: public class Runnable implements java.lang.Runnable { // private static Object lock=new Object(); // private int count =0;//表白得次数 AtomicInteger ac=new AtomicInteger(0); @Override...
摘要由CSDN通过智能技术生成

这个案例每一次都进行锁得判断,获取锁,最后释放锁,效率非常慢
            代码改写:
          

 public class Runnable implements java.lang.Runnable {
  //  private static Object lock=new Object();
  //  private int count =0;//表白得次数

    AtomicInteger ac=new AtomicInteger(0);
    @Override
    public void run() {
            for (int i = 0; i < 100; i++) {
                //从共享数据中读取数据到本地栈
                //修改本线程中变量副本得值
                //会把本线程栈中变量的值赋给共享数据
              //  synchronized (lock) {
                //count++;
                //ac++是一个错误得值 ac是一个对象 对象不能++  得调用里边得方法
                int count = ac.incrementAndGet();
                System.out.println("我要向你表白"+count+"次");
           // }
        }
    }
}
public class Demo {
    public static void main(String[] args) {
        Runnable r=new Runnable();
        for (int i = 0; i < 100; i++) {
            new Thread(r).start();
        }
    }
}

count++  可能会被其他 线程抢走  但是刚刚得原子类 就可以保证自增得这几步要么都成功要么都失败AtomicInteger原理
        自旋锁+CAS算法
        CAS算法:当有三个操作数(内存之V,旧的预期值A,要修改得值B)
                旧的预期值A==内存值  此时修改成功 将V修改为B
                旧的预期值A!=内存之  此时修改失败 不做任何操作
                重新获取现在得最新值,这个重新获取得动作就称之为自旋
                

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值