机制

  1. 乐观锁是一种思想,具体实现是,表中有一个版本字段,第一次读的时候,获取到这个字段。处理完业务逻辑开始更新的时候,需要再次查看该字段的值是否和第一次的一样。如果一样更新,反之拒绝。之所以叫乐观,因为这个模式没有从数据库加锁。

  2. 悲观锁是数据库层面加锁,都会阻塞去等待锁。乐观锁优点程序实现,不会存在死锁等问题。他的适用场景也相对乐观。阻止不了除了程序之外的数据库操作。悲观锁是数据库实现,他阻止数据库写操作。再来说更新数据丢失,所有的读锁都是为了保持数据一致性。乐观锁如果有人在你之前更新了,你的更新应当是被拒绝的,可以让用户从新操作。悲观锁则会等待前一个更新完成。这也是区别。具体业务具体分析

实现方式

乐观锁,version方式:一般是在数据表中加上一个数据版本号version字段,表示数据被修改的次数,当数据被修改时,version值会加一。当线程A要更新数据值时,在读取数据的同时也会读取version值,在提交更新时,若刚才读取到的version值为当前数据库中的version值相等时才更新,否则重试更新操作,直到更新成功。sql实现代码:

update table
set x=x+1, version=version+1
where id=#{id} and version=#{version};CAS操作方式:即compare and swap 或者 compare and set,

涉及到三个操作数,数据所在的内存值,预期值,新值。当需要更新时,判断当前内存值与之前 取到的值是否相等,若相等,则用新值更新,若失败则重试,一般情况下是一个自旋操作,即不 断的重试。

悲观锁,是由数据库自己实现的,要用的时候,我们直接调用数据库的相关语句就可以了(原理:共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程),如行锁、读锁和写锁等,都是在操作之前加锁。

使用场景

乐观锁:比较适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可能性就会增大,为了保证数据的一致性,应用层需要不断的重新获取数据,这样会增加大量的查询操作,降低了系统的吞吐量。

悲观锁:比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。

乐观锁与悲观锁各自适用场景是什么?相关推荐

  1. **Java有哪些悲观锁的实现_面试4连问:乐观锁与悲观锁的概念、实现方式、场景、优缺点?...

    推荐阅读: 数据库面试4连问:分库分表,中间件,优缺点,如何拆分? 终极手撕之架构大全:分布式+框架+微服务+性能优化,够不够? 消息队列面试,你能顶得住面试官这波10大连环炮的攻势吗? 01 乐观锁 ...

  2. mysql共享锁使用方法_浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景...

    Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |-- ...

  3. Java多线程学习总结(5)——乐观锁和悲观锁的基本概念、实现方式(含实例)、适用场景及常见面试题

     分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!点击浏览教程 一.基本概念 乐观锁和悲观锁是两种思想,用于解决并发场景下的数据竞争问题. 乐观锁 ...

  4. mysql锁的应用场景_浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景

    Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |-- ...

  5. 乐观锁和悲观锁的含义-实现方式-应用场景

    何谓悲观锁与乐观锁 乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展.这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人. 悲观锁 总 ...

  6. 乐观锁和悲观锁区别以及使用场景

    乐观锁和悲观锁是并发控制中两种不同的策略,用于解决多个线程或进程同时访问和修改共享数据时可能出现的并发问题. 悲观锁 悲观锁的基本思想是,在数据被访问时,假设会有其他的线程或进程也会访问这个数据,所以 ...

  7. 乐观锁和悲观锁的原理及应用场景

    一.乐观锁和悲观锁的策略 1.悲观锁(一般都是通过锁机制来实现的) (1)每次去拿数据都会认为别人会修改,所以每次拿数据的时候都会上锁.比如:行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁.再比如 ...

  8. 经典问题之乐观锁和悲观锁及使用场景

    悲观锁 悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁. 悲观锁: ...

  9. 乐观锁与悲观锁的概念、实现方式、场景、优缺点?

    01 乐观锁与悲观锁的基本概念 何为乐观锁与悲观锁? 答:乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展.这两种人各有优缺点,不能不以场景而 ...

  10. 乐观锁和悲观锁的区别及使用场景

    转载自:https://blog.csdn.net/u010739551/article/details/81184203 悲观锁 悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每 ...

最新文章

  1. 生成jpg的缩略图并添加水印
  2. 解决jmeter测试报告不显示后面的断言错误失败信息
  3. python无法使用pip_解决无法使用pip命令加载Python的扩展库问题
  4. 每天一道LeetCode-----链表排序,要求复杂度在O(nlogn)
  5. springMVC3学习(四)--訪问静态文件如js,jpg,css
  6. decimal这个数据类型的用法,保证你看懂
  7. 兄弟们别加班了,老板不会因为你拼命写代码而感谢你啊~有木有啊
  8. Springmvc_3(SessionAttributes 将数据放入到session中)
  9. Golang高效实践之泛谈篇
  10. UML用例图分析——铁路售票系统
  11. Flink在bilibili的优化与实践
  12. three.js 入门指南(敷衍一下)
  13. Hark的数据结构与算法练习之圈排序
  14. kubernetes节点减容与扩容
  15. golang对接支付宝支付
  16. 流量复制导流工具研究
  17. 2016 ECCV-Gated Siamese Convolutional Neural Network Architecture for Human Re-ID
  18. Leek——韭菜的自我救赎
  19. 2022开年第一个爆款凭什么是山东蓝翔?如何实现破圈传播?
  20. 聚合支付备案机构为479家,首次出现注销聚合支付备案

热门文章

  1. 使用网页对话框来显示图片 window.open()
  2. 合工大五套卷_2020合工大超越数一五套卷第一套感想
  3. P1579哥德巴赫猜想
  4. SQL Server 2000详细安装过程及配置
  5. 用PHP去掉文件头的Unicode签名(BOM)
  6. 双谷人才财务管理(序)
  7. win32 注册表操作
  8. wikioi 1034 家 实时动态的网络流量(费用流)
  9. win7 64位下如何安装配置mysql-5.7.4-m14-winx64(安装记录)
  10. 食疗去除头屑的小偏方 不错!