理解乐观锁和悲观锁
创作时间:
作者:
@小白创作中心
理解乐观锁和悲观锁
引用
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) { // ... }
使用场景
- 多写少读:适用于写多读少的场景,因为悲观锁在读取数据时就加锁,可以确保数据的一致性。
- 高并发:适用于并发冲突较多的场景,因为悲观锁在读取数据时就加锁,可以避免频繁的更新冲突。
热门推荐
常见交通违法行为处罚标准如何确定
如何构建品牌信任:消费者视角分析
在人多的场合讲话总是紧张?可以这样缓解
王者荣耀铭文搭配攻略:四种通用方案轻松上手
你有脱发焦虑吗?医生教你远离“秃”如其来的烦恼
头晕想吐喝什么能缓解
隋卞教做“炝锅面”,记住2个窍门,只放盐就香,不愧是行政总厨
高温持续,特应性皮炎/湿疹宝宝该怎么办?
韩国米价疯涨!韩政府:目的终于达到了
Steam上十款好玩的休闲治愈向游戏推荐
嗓子干痒咳嗽怎么办?全方位缓解指南
有效担保的形式有哪些?这些形式如何降低风险?
好人有好报”是有科学依据的!最新研究:早死风险可降低44%!
房产公证委托:最快办理方式
12333人工服务最早几点开始工作?
山东事业编改革后如何备考?
充电头66w和120w的区别
考研A区B区的区别及国家线解读
深入解析阴阳、五行、天干地支的区别与联系
「软件设计模式」桥接模式(Bridge Pattern)
上海外环四大热门板块解析
应对市场变化与竞争对手挑战的策略
胆囊积液的中医辨证治疗
无锡周边10条户外徒步线路大公开,户外徒步爬山经典路线推荐
过年必备卤肉,自己做很简单,5种卤味做法一定要收藏,干净卫生
甘蔗从哪里来?哪部分最甜?一文看甘蔗的“前世今生”
王者荣耀铭文搭配攻略:四种通用方案轻松上手
10种方法让客户源源不断——转介绍
EABS刹车是什么
如何帮助孩子克服学习兴趣缺失,提升学习积极性与动力