zoukankan      html  css  js  c++  java
  • 乐观锁与悲观锁

    1.悲观锁:

    悲观锁是一种比较悲观的思想,认为每次操作都会修改变量的值,因此每次对变量就行操作都会进行加锁;

    数据库中的行锁,表锁,读锁,写锁都是悲观锁的实现;

    java中的syschronized关键字也是悲观锁的实现;

    2.乐观锁:

    乐观锁就是一种比较乐观的思想,认为每次操作都不会进行修改变量,所以每次操作都不会进行上锁;

    但是在每次进行更新操作的时候会判断在此期间是否修改变量的值,常用的实现方式的cas操作;

    java中的juc包下的automic包下的类都是采用CAS操作实现乐观锁;

    3.CAS操作:

    (1)CAS操作过程:首先需要进行读写操作的变量的内存位置V,然后需要变量的预期的原始值A,和进行修改操作的拟写入新值B;

    若变量的预期原始值A与变量的内存位置相匹配,则将拟写入新值B赋给该变量,否则进行循环获取最新的预期原始值A;

    在多个线程并发进行修改操作的时候,只有一个线程会获得执行,其他线程并不会被阻塞,而是会被通知获取执行失败;

    (2)CAS操作的缺点:

    首先就是CAS操作存在ABA问题;

    其此是CAS操作只能对一个变量进行操作;

    CAS操作会占用CPU资源,降低吞吐量;

    详细内容参考:https://www.cnblogs.com/qjjazry/p/6581568.html

  • 相关阅读:
    轻量级锁和偏向锁等
    桥接模式
    适配器模式
    建造者模式
    2-工厂模式
    Swift
    给视图添加点击波纹效果swift5
    Xcode 支持真机版本路径
    22个常用开源库(most swift)
    Github上关于iOS的各种开源项目集合
  • 原文地址:https://www.cnblogs.com/xuzhiyuan/p/9272711.html
Copyright © 2011-2022 走看看