乐观锁与悲观锁的区别?
创作时间:
作者:
@小白创作中心
乐观锁与悲观锁的区别?
引用
CSDN
1.
https://blog.csdn.net/weixin_53391173/article/details/139212082
在多线程编程中,锁机制是保证数据一致性和完整性的重要手段。其中,乐观锁和悲观锁是两种常见的锁机制。本文将通过通俗易懂的语言和生活中的例子,帮助读者理解这两种锁的区别和应用场景。
乐观锁:相信数据不会被同时修改
顾名思义,乐观锁就是持比较乐观态度的锁。乐观锁在操作数据时非常乐观,认为别的线程不会同时修改数据,所以不会上锁,但是在更新的时候会判断在此期间别的线程有没有更新过这个数据。
悲观锁:担心数据会被同时修改
反之,悲观锁就是持悲观态度的锁。悲观锁在操作数据时比较悲观,每次操作数据的时候都认为别的线程也会同时修改数据,所以每次操作数据的时候都会上锁,这样别的线程想拿到这个数据就会阻塞,直到它拿到锁。
举个例子,有时候我们上公共厕所的时候要排队,如下图所示。
如果你蹲马桶的时候开着门,外面有人就会排着队看着你。你会这么做吗?当然,如果在自己家里,有可能会这么干,这就是乐观锁。虽然能进到房间,但是有人占着坑位,该排队还是得排队。比如数据库提供的 write_condition 机制,以及JavaAPI并发工具包下面的原子变量类,就是使用了乐观锁的CAS 来实现的。
悲观锁就不同了,就相当于进房间之后,第一件事就是把门锁上,在门外排队等候的人不知道里面发生了什么,又着急但是又只能干等着。比如行锁、表锁、读锁、写锁,都是在操作之前先上锁,JavaAPI中的synchronized 和ReentrantLock 等独占锁都是悲观锁的实现。
应用场景总结
根据前面对两种锁的介绍,总结一下两种锁的应用场景。
首先来看乐观锁,它适用于写少读多的情况,也就是说减少操作冲突,这样可以省去锁竞争的开销,提高系统的吞吐量。而悲观锁呢,它适用于写多读少的情况。因为,如果还使用观锁,会经常出现操作冲突,这样会导致应用层不断地重试,反而会降低系统的性能。
热门推荐
冬季养生:白萝卜的正确打开方式
虾仁蛋花豆腐羹:一道获奖菜品的美味与营养
南平封肉:猪肉界的顶级享受!
探访山东三大历史文化名城:济南、曲阜、青岛
职场&IT笑话:轻松一刻解压神器
笑一笑,疾病真的会跑掉!
神舟十二号与北斗:中国航天实力大揭秘
同安封肉:厦门年夜饭桌上的文化传承
山东旅游必学:日出日落黄金半小时摄影技巧
北宫雨泽教你用笑话秒变社交达人
秋冬必备:白萝卜煎饼&炖排骨大法!
光电镊微纳机器人:生命科学领域的“光之手”
2024海南七仙温泉嬉水节:浪漫七夕里的民族狂欢
从显微镜到同步辐射:古生物学研究的技术演进
春节将至,初三生必学拜年礼仪!
春节老人健康指南:从饮食到心理的全方位呵护
白茶和红茶有什么区别:功效对比与哪个更好选择
马斯克与SpaceX:万亿美元市值的未来展望
王者荣耀S12赛季:元歌打野出装技巧大揭秘!
美食作家王刚教你做国宴级开水白菜!
风干鸡怎么烹饪才好吃?两种做法,简单又好吃!
电子竞技行业发展历程:从全球到中国的演变
碘131治疗过程及费用是什么
厦门五天四夜自由行攻略:玩转海滨风情与文化景点
揭秘细胞内小宇宙:线粒体和叶绿体的蛋白质合成机制
白杨树叶绿体和线粒体DNA的遗传密码
揭秘线粒体叶绿体:如何高效转化能量?
牛油果怎么挑选,牛油果的挑选方法技巧,一次性讲清楚!
牛油果美味食谱:营养丰富的新体验
兰花的水培方法和注意事项,需要浇多少水?