首页 > 其他 > 详细

乐观锁与悲观锁

时间:2020-07-04 18:20:33      阅读:43      评论:0      收藏:0      [点我收藏+]

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

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

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

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

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

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

悲观锁: 修改数据把数据锁住,在更改。别人此时无法访问
synchronized和Lock类

乐观锁:常用就是CAS算法。版本号,原子类AtomicInteger

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

数据库:

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

开销对比

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

适用场景

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

乐观锁与悲观锁

原文:https://www.cnblogs.com/64Byte/p/13235689.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!