理解乐观锁和悲观锁
创作时间:
作者:
@小白创作中心
理解乐观锁和悲观锁
引用
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) { // ... }
使用场景
- 多写少读:适用于写多读少的场景,因为悲观锁在读取数据时就加锁,可以确保数据的一致性。
- 高并发:适用于并发冲突较多的场景,因为悲观锁在读取数据时就加锁,可以避免频繁的更新冲突。
热门推荐
如何用软件测试距离手机
价格战的边际效应:麦肯锡分析消费决策的真实影响
为了膝盖“长寿”,爬楼梯时做好这3点
氢键全方位详细介绍
为什么服务器时间总是出现不准确的问题?
律师事务所对案件的保密措施是什么
车祸对方受伤住院费用谁垫付
吃甜食真的能缓解低血糖吗?
村民自发救援事件的法律性质与责任分担
跳绳减肥心率多少合适?跳绳减肥心率区间详解
国内能源领域首台(套)!哈电集团技术创新引擎为老旧机组跨代升级“延寿”
西汉长沙国渔阳王后和她的时代:看两千年前的大女主
如何挑选优质羊肉?吃货必备指南!
炉石传说法师职业卡组全方位攻略:从入门到精通
大专生就业培训有哪些方面 如何选择就业培训
如何为你的练习选择合适的瑜伽垫
奶精、炼奶、牛奶、奶粉、淡奶,哪样最健康?
早期肺癌术后恢复指南:营养、锻炼与中药调理全攻略
户口是空挂户什么意思
江苏名气最大的6道“淮扬菜”,色香味俱全,不愧是八大菜系之一
伤口有渗液说明在恢复吗
半夏厚朴汤治梅核气 方剂组成及现代应用
执政时期经济成绩单,是影响美国大选的关键因素
长期在黑暗环境看电影会影响视力吗?
申请签证马来西亚流程详解,开启东南亚之旅
用STAR法则优化简历撰写:让工作经验更有说服力
感冒了炖什么汤比较好
剖腹产后第一天吃什么饭 第一餐吃什么最好
如何确定保险宽限期条款
《桃夭》:桃花映照下的美满与和谐