乐观锁与悲观锁的区别?
创作时间:
作者:
@小白创作中心
乐观锁与悲观锁的区别?
引用
CSDN
1.
https://blog.csdn.net/weixin_53391173/article/details/139212082
在多线程编程中,锁机制是保证数据一致性和完整性的重要手段。其中,乐观锁和悲观锁是两种常见的锁机制。本文将通过通俗易懂的语言和生活中的例子,帮助读者理解这两种锁的区别和应用场景。
乐观锁:相信数据不会被同时修改
顾名思义,乐观锁就是持比较乐观态度的锁。乐观锁在操作数据时非常乐观,认为别的线程不会同时修改数据,所以不会上锁,但是在更新的时候会判断在此期间别的线程有没有更新过这个数据。
悲观锁:担心数据会被同时修改
反之,悲观锁就是持悲观态度的锁。悲观锁在操作数据时比较悲观,每次操作数据的时候都认为别的线程也会同时修改数据,所以每次操作数据的时候都会上锁,这样别的线程想拿到这个数据就会阻塞,直到它拿到锁。
举个例子,有时候我们上公共厕所的时候要排队,如下图所示。
如果你蹲马桶的时候开着门,外面有人就会排着队看着你。你会这么做吗?当然,如果在自己家里,有可能会这么干,这就是乐观锁。虽然能进到房间,但是有人占着坑位,该排队还是得排队。比如数据库提供的 write_condition 机制,以及JavaAPI并发工具包下面的原子变量类,就是使用了乐观锁的CAS 来实现的。
悲观锁就不同了,就相当于进房间之后,第一件事就是把门锁上,在门外排队等候的人不知道里面发生了什么,又着急但是又只能干等着。比如行锁、表锁、读锁、写锁,都是在操作之前先上锁,JavaAPI中的synchronized 和ReentrantLock 等独占锁都是悲观锁的实现。
应用场景总结
根据前面对两种锁的介绍,总结一下两种锁的应用场景。
首先来看乐观锁,它适用于写少读多的情况,也就是说减少操作冲突,这样可以省去锁竞争的开销,提高系统的吞吐量。而悲观锁呢,它适用于写多读少的情况。因为,如果还使用观锁,会经常出现操作冲突,这样会导致应用层不断地重试,反而会降低系统的性能。
热门推荐
兰斯遭遇连败,布雷斯特状态火热能否继续表现?
详解油卡充值:两种主流方式及对加油便利性的影响
打嗝成因与缓解策略:生理机制与情绪调控的综合探讨
秒懂!掌握立方体体积计算方法,轻松解决空间问题!
《暗黑破坏神:不朽》野蛮人雷锤流派攻略
看阜阳“过路经济”如何“落地”?
黄斑变性丨警惕老年人视力的“隐形杀手”
宇宙黑洞里面是什么?探索黑洞内部的奥秘
申请仲裁时必须提供充分的证据
猎头、企业、人才之间有何关联?
厕所臭怎么弄?居家除臭小妙招
肠道炎症检测的好帮手——粪便钙卫蛋白
如何写出让人无法忽视的爆款标题?
曹干妈生辰八字解析 拜干妈有何讲究与文化意义
孩子的“秘密”,医生能替他保守吗?
利用 API 安全防护的基本工具和最佳实践防御 API 攻击
换季、天冷一直流鼻水怎么办?这5招帮你舒缓、停止!
数说节气谚语:谷雨前后 为什么适合种瓜点豆?
月入过万?大学生约拍真的“有手就行”?
刀郎演唱会为何场场爆满?揭秘背后五大原因
提升实物劳动生产率的有效策略与方法
神经语言程序学(NLP):解析身心语言程序学的理论与实践
在梦里戒烟、背单词、提升创造力?梦境工程师是在助眠治病,还是操控大脑?
违法辞退员工公司要承担哪些法律后果
冬天温江带娃好去处:亲子乐园、文化体验、户外探险一站式攻略
墙面一直不干?教你如何判断是返潮还是渗水
小米限制国行设备刷国际版系统:安全优先,用户体验需留意
从传统美食到现代佳肴的蜕变之旅
韭黄炒蛋先炒韭黄还是先炒蛋
为什么感冒会流鼻涕