乐观锁与悲观锁的区别?
创作时间:
作者:
@小白创作中心
乐观锁与悲观锁的区别?
引用
CSDN
1.
https://blog.csdn.net/weixin_53391173/article/details/139212082
首先来看乐观锁。顾名思义,乐观锁就是持比较乐观态度的锁。乐观锁在操作数据时非常乐观,认为别的线程不会同时修改数据,所以不会上锁,但是在更新的时候会判断在此期间别的线程有没有更新过这个数据。
反之,悲观锁就是持悲观态度的锁。悲观锁在操作数据时比较悲观,每次操作数据的时候都认为别的线程也会同时修改数据,所以每次操作数据的时候都会上锁,这样别的线程想拿到这个数据就会阻塞,直到它拿到锁。举个例子,有时候我们上公共厕所的时候要排队,如下图所示。
如果你蹲马桶的时候开着门,外面有人就会排着队看着你。你会这么做吗?当然,如果在自己家里,有可能会这么干,这就是乐观锁。虽然能进到房间,但是有人占着坑位,该排队还是得排队。比如数据库提供的 write_condition 机制,以及JavaAPI并发工具包下面的原子变量类,就是使用了乐观锁的CAS 来实现的。
悲观锁就不同了,就相当于进房间之后,第一件事就是把门锁上,在门外排队等候的人不知道里面发生了什么,又着急但是又只能干等着。比如行锁、表锁、读锁、写锁,都是在操作之前先上锁,JavaAPI中的synchronized 和ReentrantLock 等独占锁都是悲观锁的实现。
根据前面对两种锁的介绍,总结一下两种锁的应用场景。
首先来看乐观锁,它适用于写少读多的情况,也就是说减少操作冲突,这样可以省去锁竞争的开销,提高系统的吞吐量。而悲观锁呢,它适用于写多读少的情况。因为,如果还使用观锁,会经常出现操作冲突,这样会导致应用层不断地重试,反而会降低系统的性能。
热门推荐
痰湿体质:症状表现与改善方案
降胆固醇最有效!一种食用油Omega-9含量最高,可预防中风和心脏病
不饱和脂肪酸的综述
赛罗VS贝利亚:一场跨越时空的宿命对决
湘潭这些特色小吃,经典美味,全吃过说明你是真“吃货!”
智能设备电池寿命延长指南:充电技巧与温度控制诀窍
爱因斯坦的童年:从语言迟缓到科学天才的成长之路
弗洛伊德告诉你:快乐童年助你健康一生
童年回忆如何治愈你的心灵?
赵本山的喜剧人生:从舞台到心灵,笑中带泪的传奇
连登春晚24年的黄宏,被免职后销声匿迹,如今已走上另一条大道
陪中年人入睡的,只有郭德纲的相声
东北喜剧之王赵本山:从爆红到消失不见,困住他的300亿资本迷局
临床治疗指南:药物治疗功能性便秘
洛阳白云山:杜牧诗里的秋色仙境
杜牧带你走进白云深处的诗意世界
陶弘景的隐逸世界:白云深处的哲学
天平山上的白云泉:人生哲理的启示
冬日里的羊城第一秀:白云山3日游攻略
肌肉在跳动是什么原因
【抑郁症的五个阶段】症状、自我调理与饮食建议
“回收、再利用和再利用”:帮助地球的34个绝妙想法!
王者荣耀:一刀流铠的团战无敌秘籍
王者荣耀:铠“一刀流”玩法攻略,教你实现一刀致命
喜羊羊第58集更新啦!你看了吗?
照片分享有风险!这些法律边界和隐私隐患要知道
秋冬养生必备:如何挑选优质东北红松子?
春节消费账单:从传统年货到新式旅游,你的春节预算准备好了吗?
松子真的能预防心血管疾病吗?
松子中的维生素E,抗衰神器!