乐观锁与悲观锁的区别?
创作时间:
作者:
@小白创作中心
乐观锁与悲观锁的区别?
引用
CSDN
1.
https://blog.csdn.net/weixin_53391173/article/details/139212082
首先来看乐观锁。顾名思义,乐观锁就是持比较乐观态度的锁。乐观锁在操作数据时非常乐观,认为别的线程不会同时修改数据,所以不会上锁,但是在更新的时候会判断在此期间别的线程有没有更新过这个数据。
反之,悲观锁就是持悲观态度的锁。悲观锁在操作数据时比较悲观,每次操作数据的时候都认为别的线程也会同时修改数据,所以每次操作数据的时候都会上锁,这样别的线程想拿到这个数据就会阻塞,直到它拿到锁。举个例子,有时候我们上公共厕所的时候要排队,如下图所示。
如果你蹲马桶的时候开着门,外面有人就会排着队看着你。你会这么做吗?当然,如果在自己家里,有可能会这么干,这就是乐观锁。虽然能进到房间,但是有人占着坑位,该排队还是得排队。比如数据库提供的 write_condition 机制,以及JavaAPI并发工具包下面的原子变量类,就是使用了乐观锁的CAS 来实现的。
悲观锁就不同了,就相当于进房间之后,第一件事就是把门锁上,在门外排队等候的人不知道里面发生了什么,又着急但是又只能干等着。比如行锁、表锁、读锁、写锁,都是在操作之前先上锁,JavaAPI中的synchronized 和ReentrantLock 等独占锁都是悲观锁的实现。
根据前面对两种锁的介绍,总结一下两种锁的应用场景。
首先来看乐观锁,它适用于写少读多的情况,也就是说减少操作冲突,这样可以省去锁竞争的开销,提高系统的吞吐量。而悲观锁呢,它适用于写多读少的情况。因为,如果还使用观锁,会经常出现操作冲突,这样会导致应用层不断地重试,反而会降低系统的性能。
热门推荐
揭秘!《塞尔达2》里林克的新挑战有多刺激?
如何在 Minecraft 中找到下界堡垒
习练形意拳需要经过的“三个阶段”
遭遇老板欠薪?合法维权的方法
小麦什么时间种是最佳时期?
电视史上最令人失望的结局排名:从《纸牌屋》到《权力的游戏》
青春选择去西部
生气引起的胸闷气短应该怎么办
饭店厨房不锈钢设备维护与故障排除指南,轻松应对日常问题
公司的团队优秀奖如何分
苹果未获特朗普豁免,库克曾说:美国工人比不上中国
木星走多久?了解木星自转与公转的详细解说
太阳系八大行星之一的“海王星”,被发现以来仅绕太阳运行了一圈
虚幻引擎5配置需求高,游戏优化问题谁之过?
【红色记忆】纪念湘江战役90周年(中)丨三大战场 悲壮抗击
小区水费的计算方法和缴纳流程是什么?如何合理控制水费支出?
巴萨的愧疚式续约后患无穷,逐渐复兴的巴萨阵中只剩一名高薪包袱
新疆察布查尔:“特色美食”助推“舌尖经济”增效
舌尖红是什么原因造成的
游戏开发全流程及其工具详解
如何快速将微信文件传输到电脑?实用技巧分享
2025年医保异地就医流程报销流程是什么?
孕妇晚餐吃什么比较好又营养
酵母粉、泡打粉和小苏打有什么区别?别再混淆使用
世界牛奶日:巴氏杀菌、高温灭菌、有机、舒化...教你轻松辨别各种牛奶
面对肿瘤放疗,如何给心灵“松绑”?这份指南请收好!
香港银行存款利率真相:高息存款背后的投资陷阱
如何改善脱发掉发问题
欧洲心脏病学会发布最新共识:肥胖与心血管疾病的关联及临床管理策略
从玛雅神饮到情人节礼物:巧克力的浪漫史