理解乐观锁和悲观锁
创作时间:
作者:
@小白创作中心
理解乐观锁和悲观锁
引用
1
来源
1.
https://www.cnblogs.com/2324hh/p/18536657
在多线程或分布式系统中,数据的并发访问控制是一个重要的问题。乐观锁和悲观锁是两种常见的解决方案,它们分别基于不同的假设来处理数据的并发访问。本文将详细介绍这两种锁机制的概念、实现方式和适用场景。
乐观锁
乐观锁的基本假设是:每次去拿数据的时候别人不会修改,所以不会上锁,但是每次要拿数据的时候都会先判断数据是否被别人修改。
实现方式
版本号机制:在数据表中增加一个版本号字段,每次更新数据时,版本号加1。更新前检查版本号是否发生变化,如果发生变化则更新失败。
UPDATE table SET value = ?, version = version + 1 WHERE id = ? AND version = ?时间戳机制:在数据表中增加一个时间戳字段,每次更新数据时,时间戳更新为当前时间。更新前检查时间戳是否发生变化,如果发生变化则更新失败。
UPDATE table SET value = ?, timestamp = CURRENT_TIMESTAMP WHERE id = ? AND timestamp = ?
使用场景
- 多读少写:适用于读多写少的场景,因为乐观锁在读取数据时不加锁,可以提高读取的吞吐量。
- 低并发:适用于并发冲突较少的场景,因为乐观锁在更新数据时需要检查数据是否被修改,如果冲突频繁,可能会导致大量重试。
悲观锁
悲观锁的基本假设是:认为每次去拿数据的时候别人都会修改,所以每次都会上锁。
实现方式
数据库锁:使用数据库的锁机制,如
SELECT ... FOR UPDATE。SELECT * FROM table WHERE id = ? FOR UPDATE编程语言级别的锁:使用编程语言提供的锁机制,如Java中的
synchronized关键字或ReentrantLock。synchronized (lockObject) { // ... }
使用场景
- 多写少读:适用于写多读少的场景,因为悲观锁在读取数据时就加锁,可以确保数据的一致性。
- 高并发:适用于并发冲突较多的场景,因为悲观锁在读取数据时就加锁,可以避免频繁的更新冲突。
热门推荐
我国心血管病预防策略及面临的挑战
《纸间谜迹》:在折叠之间寻找出路
2024年河南本科二批理科投档线出炉:129所高校投档线、位次排名全解析
文艺作品中哪吒形象的演化:从护法夜叉到文化符号的千年蜕变
《逃离塔科夫》更新带来了哪些新变化?周期性删档对玩家有何影响?
菜鸟驿站的“取件码” 揭开假私烟运输的神秘面纱
剧情式综艺剪辑秘诀:人物塑造与节奏把控
揭秘!皮肤瘙痒症的5大原因及对策
成长的挑战与机遇:青春期孩子的自我成长之路
股票投资入门:如何使用分析工具做出明智决策?
【设备兼容性解决方案】:确保ROOT权限在各设备上的稳定运行
深圳火热楼市背后,年轻人已经选择了惠州
厦门今年来游客已超9000万人次
青岛崂山成追星胜地,天文学家许坤传授观星技巧
DSD 与 FLAC:哪一种无损音频格式更适合你?
电焊烟尘的危害及防护措施
Tor隐藏服务指纹识别技术分析
咬伤舌头怎么办才能好的快
《陈情令》演员现状,五年过去只有肖战王一博孟子义成为焦点
很多人睡觉浅,易惊醒,这里有5种方法,或许能帮你提高睡眠质量
华强北向上生长:从行业巨舰的秀场,到创客码农的“战场”
新疆十大名面:从纳仁到拉条子,每一种都藏着独特的故事
女孩子护肤全攻略:十大维度助你实现美丽蜕变
揭秘和田玉手链高价之谜:稀缺资源与文化价值的双重驱动
牛油果,真的很能“打”?
预防 AGA(男性型秃发)
AI移动开发工具助力高效开发,探索应用与实践的最佳路径
从高考270分到研究生!上岸的他还减重近百斤,颜值逆袭......
USB Type-C引脚信号及PCB布局布线
羽绒服蓬松度真的越高越暖吗?详解保暖关键因素。