理解乐观锁和悲观锁
创作时间:
作者:
@小白创作中心
理解乐观锁和悲观锁
引用
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) { // ... }
使用场景
- 多写少读:适用于写多读少的场景,因为悲观锁在读取数据时就加锁,可以确保数据的一致性。
- 高并发:适用于并发冲突较多的场景,因为悲观锁在读取数据时就加锁,可以避免频繁的更新冲突。
热门推荐
实习实践如何提升大学生的综合素质和核心竞争力
床可以朝南吗?风水与健康的双重考量
手动挡车高速挂倒档,后果很严重!
福特蒙迪欧车主必读:高速行驶时误挂倒档的严重后果与正确操作指南
高速公路突发爆胎?这些应急技巧保你安全!
5G智慧合杆:城市发展的新引擎
婚纱摄影全攻略:8个关键步骤助你拍出完美婚纱照
新娘妆容全攻略:婚礼当天如何通过妆容展现最美自己
拍摄婚纱照攻略之表情管理篇:如何拍出最美的婚纱照?
老捷达倒档操作大揭秘!
深度剖析币圈四大诈骗伎俩与防范策略
去中心化交易所安全吗?会倒闭跑路吗?
智慧灯杆:点亮未来社区生活
智慧合杆:智慧城市的新基建,让城市更聪明更安全
《爆裂飞车》:动画与游戏的双重狂欢
观音菩萨的那些不为人知的故事
在家供奉观音菩萨像的正确姿势
福建家庭供奉汉白玉观音像:摆放禁忌与风水指南
独生子女家庭有福了,凭“小红本”可领5大补贴,最高领5000元?
智慧灯杆助力环保,打造绿色未来
新材料让智慧灯杆更智能
国债逆回购为何周四购买更划算?
中国电影市场复苏势头强劲:票房增长潜力巨大
足月37周和40周有什么区别吗?能坚持住就别提前生!
乐山金口河大瓦山:冬季生态游打卡地
大瓦山徒步热!五池村出发攻略
智慧灯杆:物联网应用的新宠儿
智慧路灯+综合能源站:绿色未来新趋势
组合数公式
组合数公式