乐观锁与悲观锁的区别?
创作时间:
作者:
@小白创作中心
乐观锁与悲观锁的区别?
引用
CSDN
1.
https://blog.csdn.net/weixin_53391173/article/details/139212082
在多线程编程中,锁机制是保证数据一致性和完整性的重要手段。其中,乐观锁和悲观锁是两种常见的锁机制。本文将通过通俗易懂的语言和生活中的例子,帮助读者理解这两种锁的区别和应用场景。
乐观锁:相信数据不会被同时修改
顾名思义,乐观锁就是持比较乐观态度的锁。乐观锁在操作数据时非常乐观,认为别的线程不会同时修改数据,所以不会上锁,但是在更新的时候会判断在此期间别的线程有没有更新过这个数据。
悲观锁:担心数据会被同时修改
反之,悲观锁就是持悲观态度的锁。悲观锁在操作数据时比较悲观,每次操作数据的时候都认为别的线程也会同时修改数据,所以每次操作数据的时候都会上锁,这样别的线程想拿到这个数据就会阻塞,直到它拿到锁。
举个例子,有时候我们上公共厕所的时候要排队,如下图所示。
如果你蹲马桶的时候开着门,外面有人就会排着队看着你。你会这么做吗?当然,如果在自己家里,有可能会这么干,这就是乐观锁。虽然能进到房间,但是有人占着坑位,该排队还是得排队。比如数据库提供的 write_condition 机制,以及JavaAPI并发工具包下面的原子变量类,就是使用了乐观锁的CAS 来实现的。
悲观锁就不同了,就相当于进房间之后,第一件事就是把门锁上,在门外排队等候的人不知道里面发生了什么,又着急但是又只能干等着。比如行锁、表锁、读锁、写锁,都是在操作之前先上锁,JavaAPI中的synchronized 和ReentrantLock 等独占锁都是悲观锁的实现。
应用场景总结
根据前面对两种锁的介绍,总结一下两种锁的应用场景。
首先来看乐观锁,它适用于写少读多的情况,也就是说减少操作冲突,这样可以省去锁竞争的开销,提高系统的吞吐量。而悲观锁呢,它适用于写多读少的情况。因为,如果还使用观锁,会经常出现操作冲突,这样会导致应用层不断地重试,反而会降低系统的性能。
热门推荐
医院体检中心如何利用健康管理系统开展健康管理,有什么成功的经验和案例
周延儒是什么人?他的一生是什么样的?
40岁女人早秋穿衣别太复杂,掌握好这三项技巧,优雅时尚又清爽
Excel数据排序技巧:从基础到高级的完整指南
大模型数据是大模型的基础核心
参加民营企业座谈会的企业家里,长三角占据半边天?
警惕!美"另类侦察机"在中国周边活动,外形与民用飞机相似
解决腰痛的秘密武器——一个被低估的瑜伽姿势
植物能改变家里风水
中国科幻网络小说的后人类书写——以远瞳的作品为例
更名!中国科学院自动化所模式识别实验室(NLPR)简介
探寻车牌吉利号的秘密,文化、传统与现代观念的交融
《四大名著》背景朝代不同,却同时提到一个人,他是谁?
催款多次无果怎么办
冰雪点卡版:游戏中的福袋交易具体是如何操作的,有哪些注意事项?
超实用:流感高发季,家庭备药用药最全指南
八问八答:Transformer内部运作原理揭秘
探讨中文网络新词:从“出圈”到“社死”
这六种天然食物,每天换着吃,延缓大脑衰老
针织面料知识
如何分析商品价格的趋势变化?这种分析对消费有哪些指导意义?
甲状腺疾病饮食指南:吃出健康,远离病痛
智能制造新纪元:PLC与IoT的完美结合
如何有效地提高编程(特别是debug)能力?
1070元的机票,第三方订票平台“航班管家”卖3357元
周鸿祎遭AI创作者10倍“索赔”?最新回应
深圳外地车限行规定及免限行申请指南
艺术与科技的交响:《孔子密码》开启孔子文化数字艺术新纪元
毛主席诗词作品全集
科技创新让鹿产业未来可期