乐观锁与悲观锁的区别?
创作时间:
作者:
@小白创作中心
乐观锁与悲观锁的区别?
引用
CSDN
1.
https://blog.csdn.net/weixin_53391173/article/details/139212082
在多线程编程中,锁机制是保证数据一致性和完整性的重要手段。其中,乐观锁和悲观锁是两种常见的锁机制。本文将通过通俗易懂的语言和生活中的例子,帮助读者理解这两种锁的区别和应用场景。
乐观锁:相信数据不会被同时修改
顾名思义,乐观锁就是持比较乐观态度的锁。乐观锁在操作数据时非常乐观,认为别的线程不会同时修改数据,所以不会上锁,但是在更新的时候会判断在此期间别的线程有没有更新过这个数据。
悲观锁:担心数据会被同时修改
反之,悲观锁就是持悲观态度的锁。悲观锁在操作数据时比较悲观,每次操作数据的时候都认为别的线程也会同时修改数据,所以每次操作数据的时候都会上锁,这样别的线程想拿到这个数据就会阻塞,直到它拿到锁。
举个例子,有时候我们上公共厕所的时候要排队,如下图所示。
如果你蹲马桶的时候开着门,外面有人就会排着队看着你。你会这么做吗?当然,如果在自己家里,有可能会这么干,这就是乐观锁。虽然能进到房间,但是有人占着坑位,该排队还是得排队。比如数据库提供的 write_condition 机制,以及JavaAPI并发工具包下面的原子变量类,就是使用了乐观锁的CAS 来实现的。
悲观锁就不同了,就相当于进房间之后,第一件事就是把门锁上,在门外排队等候的人不知道里面发生了什么,又着急但是又只能干等着。比如行锁、表锁、读锁、写锁,都是在操作之前先上锁,JavaAPI中的synchronized 和ReentrantLock 等独占锁都是悲观锁的实现。
应用场景总结
根据前面对两种锁的介绍,总结一下两种锁的应用场景。
首先来看乐观锁,它适用于写少读多的情况,也就是说减少操作冲突,这样可以省去锁竞争的开销,提高系统的吞吐量。而悲观锁呢,它适用于写多读少的情况。因为,如果还使用观锁,会经常出现操作冲突,这样会导致应用层不断地重试,反而会降低系统的性能。
热门推荐
圣女果是转基因食品吗?
裁员补偿工资如何计算?
学校借助大数据提升教学效果
胃火旺是什么原因引起
公路隧道施工技术经验总结
面相特征与犯罪倾向:法律视角下的心理学探析
坩埚是用啥做的?怎么上千度的高温铁水,都无法熔化它?
如何挑选高性价比的服务器?
得了网球肘别怕,这些自救小妙招很管用
“健身瘦”和“饿瘦”区别在哪里?看对比图就知道答案,差别很大
命里缺金的人怎么补金?
解除狗狗寂寞孤独的15种方法(以宠物为主,让狗狗幸福快乐)
如何测量一辆车的重量?
确诊肠癌后应该怎么办?大咖带你了解就诊流程!
劳动合同的签订主体是谁
柯基犬的训练方法(全套教程)
血管狭窄吃什么药可以恢复正常人的血管
正常鞋码对照表
劳动合同必备条款与无效条款全解析:员工老板必看避坑指南
如何计算基金赎回费用?这些费用对投资者的收益有何影响?
“都市乡村”如何振兴?
高速公路行车安全知识:牢记“九字警句”,预防高速二次事故
如何优化本地DNS服务器以提升网络解析速度?
专家解读:豆腐腐竹与尿酸的关系
嘌呤食物对人体有害吗?嘌呤食物对人体的影响
印章识别技术:原理、应用与可信度提升方案
水位检测算法:防汛期间的视觉分析新突破
交警指挥手势视频教程:学习指南与注意事项
海报设计的艺术:视觉、色彩与字体的完美融合
柬埔寨旅行必吃的14种特色美食,从街头小吃到传统名菜