乐观锁与悲观锁的区别?
创作时间:
作者:
@小白创作中心
乐观锁与悲观锁的区别?
引用
CSDN
1.
https://blog.csdn.net/weixin_53391173/article/details/139212082
在多线程编程中,锁机制是保证数据一致性和完整性的重要手段。其中,乐观锁和悲观锁是两种常见的锁机制。本文将通过通俗易懂的语言和生活中的例子,帮助读者理解这两种锁的区别和应用场景。
乐观锁:相信数据不会被同时修改
顾名思义,乐观锁就是持比较乐观态度的锁。乐观锁在操作数据时非常乐观,认为别的线程不会同时修改数据,所以不会上锁,但是在更新的时候会判断在此期间别的线程有没有更新过这个数据。
悲观锁:担心数据会被同时修改
反之,悲观锁就是持悲观态度的锁。悲观锁在操作数据时比较悲观,每次操作数据的时候都认为别的线程也会同时修改数据,所以每次操作数据的时候都会上锁,这样别的线程想拿到这个数据就会阻塞,直到它拿到锁。
举个例子,有时候我们上公共厕所的时候要排队,如下图所示。
如果你蹲马桶的时候开着门,外面有人就会排着队看着你。你会这么做吗?当然,如果在自己家里,有可能会这么干,这就是乐观锁。虽然能进到房间,但是有人占着坑位,该排队还是得排队。比如数据库提供的 write_condition 机制,以及JavaAPI并发工具包下面的原子变量类,就是使用了乐观锁的CAS 来实现的。
悲观锁就不同了,就相当于进房间之后,第一件事就是把门锁上,在门外排队等候的人不知道里面发生了什么,又着急但是又只能干等着。比如行锁、表锁、读锁、写锁,都是在操作之前先上锁,JavaAPI中的synchronized 和ReentrantLock 等独占锁都是悲观锁的实现。
应用场景总结
根据前面对两种锁的介绍,总结一下两种锁的应用场景。
首先来看乐观锁,它适用于写少读多的情况,也就是说减少操作冲突,这样可以省去锁竞争的开销,提高系统的吞吐量。而悲观锁呢,它适用于写多读少的情况。因为,如果还使用观锁,会经常出现操作冲突,这样会导致应用层不断地重试,反而会降低系统的性能。
热门推荐
无人机春耕播种、施肥、打药高效技术详解
借款合同担保人担保期限应该怎么写才正确
锡和金结合,为什么熔点会低?
金锡合金熔点为何低于纯金纯锡?背后的科学原理揭秘
心理学:“刻板印象威胁”、“自我实现预言”
有一种腹泻,叫抗生素相关性腹泻
自己在家怎么做陈皮
探寻灯影牛肉的百年风味
如何减小图片的KB值?推荐六个简单易行的压缩方法
多吃半片降压药,老太太血压骤降险些丧命,降压药的这些事你得知道
二审上诉民事答辩状:全面解析与实务应用指南
氟化物替代品:羟基磷灰石牙膏
老旧小区物业如何走出“质价双低”“连年亏损”的死循环?
中药熏蒸适用于哪些疾病患者
解读电脑电源:稳定供电是性能的关键
离岸价怎么算?解析离岸价和到岸价的区别
斯蒂芬·库里25000分里程碑:颠覆传统的高效得分传奇
柴油车有劲,油价便宜,为何国内家用车都是汽油?这才是根本原因
充电桩智能化发展趋势:从运维到自动驾驶的全面升级
1990—2019年中国丙型病毒性肝炎疾病负担评估
如何查看自己Dota2数据库
论文如何筛选综述数据库
恶性疟疾的并发症
社会工作者资格证书什么时候报名?详细解析2025年报名流程
普通高等教育学籍学历十问十答
已经设置了IP地址还是自动配置怎么办
WMS仓储管理系统如何优化供应链管理
武汉海南,有望7小时高铁直达!
如何练习仿写(进行有效仿写练习的方法)
外资企业注册流程详解