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

    互斥同步锁(悲观锁)、非互斥同步锁(乐观锁)

      乐观锁 : 故名思意十分乐观,它总是认为不会出现问题,无论干什么不去上锁!如果出现了问题, 再次更新值测试

      悲观锁:故名思意十分悲观,它总是认为总是出现问题,无论干什么都会上锁!再去操作!

    问题:悲观锁有哪些劣势?

    1、阻塞、唤醒性能劣势
    2、永久阻塞(永远不能释放锁)
    3、优先级,阻塞的优先级越高,持有锁的优先级就越低。导致优先级反转的问题

    问题:什么是悲观锁。什么是乐观锁?

    悲观锁: 修改数据把数据锁住,在更改。别人此时无法访问
    synchronized和Lock类
    
    乐观锁:常用就是CAS算法。版本号,原子类AtomicInteger

    实际场景举例:
    乐观锁:push代码到仓库

    数据库:

    悲观锁:select XXx for update;
    乐观锁:添加一个字段version =1;
    某个线程改掉过这行记录。version =2
    update xCXx where version= 1; (无效)

    开销对比

      悲观锁的原始开销大于乐观锁。

    适用场景

      乐观锁:并发写入少,大多数都是读操作。
      悲观锁:并发写入多的情况(可以避免大量的无用自旋锁等消耗)
      临界区有IO操作、临界区代码复杂、临界区竞争激烈

  • 相关阅读:
    MyBatis与spring面试题-转载
    122. 买卖股票的最佳时机 II(贪心策略)
    121. 买卖股票的最佳时机
    120. 三角形最小路径和
    236. 二叉树的最近公共祖先(快手面试)
    b,b+树区别
    119. 杨辉三角 II
    118. 杨辉三角
    检查型异常(Checked Exception)与非检查型异常(Unchecked Exception)
    Redis
  • 原文地址:https://www.cnblogs.com/64Byte/p/13235689.html
Copyright © 2011-2022 走看看