乐观锁、悲观锁简单总结

  • 1、悲观锁
    • 认为多线程操作数据会导致数据出错,所以每次有一个线程操作数据时,都会先将数据锁住,再做修改,只有上一个线程释放资源锁之后,下一个线程才能操作数据(无论读写)。
    • 例子
      • JAVA的关键字synchronized
      • MySQL的select xxx for update
    • 缺点:
      • 效率低下
      • 长事务会导致开销无法忍受
    • 优点:
      • 安全性高,适用于写多读少的情况
  • 2、乐观锁
    • 1、乐观锁其实为一种无锁机制,一般通过CAS(compare and swap)算法实现,java一般使用AtomicInteger类保证原子性。
    • 2、每次线程先读取需要操作数据的原始值,得到数据并记录其版本(设为V1)。
    • 3、每当有线程操作了数据时,都会使得数据的版本更改。线程操作数据时,需要将操作时的数据版本 与 读取数据的版本 相比较,若一致,则给予修改,否则,重新读取数据(更新操作),再进行操作数据。
    • 例子:
      • 银行取钱和查余额操作。。。。。
    • 缺点:

    • 优点:
      • 效率相对于悲观锁高,适用于读多写少情况。
      • 适用于长事务开发,总的来说更适合开发(废逻辑)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeEggs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值