理解乐观锁和悲观锁
创作时间:
作者:
@小白创作中心
理解乐观锁和悲观锁
引用
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) { // ... }
使用场景
- 多写少读:适用于写多读少的场景,因为悲观锁在读取数据时就加锁,可以确保数据的一致性。
- 高并发:适用于并发冲突较多的场景,因为悲观锁在读取数据时就加锁,可以避免频繁的更新冲突。
热门推荐
宝宝肠胀气,家长如何早识别?
春天容易“内耗”?科学应对情绪问题,这些信号别忽视
基于图像分类的对抗攻击算法研究
反派角色岂能摇身变“英雄”?
白居易《长恨歌》:宫廷爱恨的悲欢离合与诗意的深情叙述
春节申遗成功,旅游业迎春天?
如何设置黄金MACD指标参数?这些参数的调整依据是什么?
黄金短线的操作要点有哪些?这些要点如何把握投资时机?
5G网络切片技术浅显易懂分析
莫旗达斡尔民族博物馆:展示达斡尔族文化的窗口
卫生间防水施工注意事项及避坑指南
如何管理销售压力心态
小动物活体成像系统在基因治疗研究中的应用
锐志的车辆状况如何?如何评估一款二手车的价值?
今天才明白,驱蚊方法很简单,不用点蚊香,家里一只蚊子都没有
告诉爸妈!这种老花镜千万别买 越戴眼睛越花
体现父母爱的10个例子
如何正确看待金融市场的波动?这种波动如何进行应对?
如何确保安全运维审计的有效性和全面性?
管理学中的决策智慧:定义与实战解析
内存时序对性能影响总结
5G毫米波技术全解:未来通信的关键优势与挑战
如何快速提升八年级下册物理与数学学习效率?
小孩黄鼻涕的四大原因及处理方法
巴恩斯迷宫:一种评估啮齿类动物空间学习和记忆的行为任务
干眼症:被忽视的“现代眼疾”,你的眼睛正在呼救!
电动自行车购买使用安全指南:从新国标到日常防护
DNS解析的工作原理及递归与迭代的区别
人参:传统中医的“国药瑰宝”
养肝护肝全攻略:从饮食到生活习惯的全方位指南