乐观锁与悲观锁的区别?
创作时间:
作者:
@小白创作中心
乐观锁与悲观锁的区别?
引用
CSDN
1.
https://blog.csdn.net/weixin_53391173/article/details/139212082
在多线程编程中,锁机制是保证数据一致性和完整性的重要手段。其中,乐观锁和悲观锁是两种常见的锁机制。本文将通过通俗易懂的语言和生活中的例子,帮助读者理解这两种锁的区别和应用场景。
乐观锁:相信数据不会被同时修改
顾名思义,乐观锁就是持比较乐观态度的锁。乐观锁在操作数据时非常乐观,认为别的线程不会同时修改数据,所以不会上锁,但是在更新的时候会判断在此期间别的线程有没有更新过这个数据。
悲观锁:担心数据会被同时修改
反之,悲观锁就是持悲观态度的锁。悲观锁在操作数据时比较悲观,每次操作数据的时候都认为别的线程也会同时修改数据,所以每次操作数据的时候都会上锁,这样别的线程想拿到这个数据就会阻塞,直到它拿到锁。
举个例子,有时候我们上公共厕所的时候要排队,如下图所示。
如果你蹲马桶的时候开着门,外面有人就会排着队看着你。你会这么做吗?当然,如果在自己家里,有可能会这么干,这就是乐观锁。虽然能进到房间,但是有人占着坑位,该排队还是得排队。比如数据库提供的 write_condition 机制,以及JavaAPI并发工具包下面的原子变量类,就是使用了乐观锁的CAS 来实现的。
悲观锁就不同了,就相当于进房间之后,第一件事就是把门锁上,在门外排队等候的人不知道里面发生了什么,又着急但是又只能干等着。比如行锁、表锁、读锁、写锁,都是在操作之前先上锁,JavaAPI中的synchronized 和ReentrantLock 等独占锁都是悲观锁的实现。
应用场景总结
根据前面对两种锁的介绍,总结一下两种锁的应用场景。
首先来看乐观锁,它适用于写少读多的情况,也就是说减少操作冲突,这样可以省去锁竞争的开销,提高系统的吞吐量。而悲观锁呢,它适用于写多读少的情况。因为,如果还使用观锁,会经常出现操作冲突,这样会导致应用层不断地重试,反而会降低系统的性能。
热门推荐
天津8大创意街区:工业风、艺术范、复古调,各具特色
现存最长唐诗《秦妇吟》:韦庄笔下的黄巢起义与晚唐乱世
小麦蚜虫大规模爆发,三种绿色防控技术助力粮食安全
权威指南:疫苗接种和抗生素预防双管齐下,降低脾脏疾病感染风险
椰奶烧、露楚、糖丝卷:泰国13种经典甜点详解
银屑病患者怎么吃?哈尔滨权威医院发布最新饮食指南
上游思维、拒绝灾难化:这样调整思维更快乐
隔夜凉拌菜不致癌,这样保存最安全
什么材质隔音效果最好?隔音材料怎么选?
秋天来了,分享十首历史顶级诗词
Word中如何输入分号?三种实用方法详解
微信客服全攻略:电话号码汇总及拨打技巧详解
海南大田保护区:300只坡鹿的守护传奇
斯坦福人生设计课:用设计思维探索人生价值
专家推荐:创伤性关节炎的系统关节保护训练法
《下水道的美人鱼》:一部关于环境与人性的警示录
731部队新罪证曝光:伯力审判细节揭秘
车辆上牌过户交易额同比翻10倍!胶州这里打造“新三样”集散中心
松阳明清古街登央视:1800年古城展新颜,107项非遗焕生机
自制冰淇淋,甜蜜家庭时光的最佳选择
研究证实:绿茶杜仲茶助力血糖管理,饮用有讲究
股市制胜秘诀:三大纪律六种技巧,从新手到高手的必修课
《永恒仙王》中的永恒珠:力量与希望的象征
康泰克为什么能缓解感冒?使用时要注意这些
特发性肺纤维化患者的营养支持疗法:维生素与食物指南
西北角乾位风水:金属植物巧布局,助运旺财
息风止痉、化痰散结,僵蚕的五大功效与临床应用
天津哪吒小镇:原无线电厂变身封神主题文旅新地标
《中国神经病理性疼痛诊疗指南(2024版)》发布,提供最新治疗方案
FQ-PCR技术革新乙肝病毒检测,精准医疗迎来新突破