原文出处:http://blog.csdn.net/hongchangfirst/article/details/26004335

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。

两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果经常产生冲突,上层应用会不断的进行retry,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适。

并发控制常见手段-----乐观锁和悲观锁相关推荐

  1. 数据库并发控制,选择乐观锁还是悲观锁?

    出处:http://www.cnblogs.com/chenlulouis/  今天,在这里,我们将讨论的是在实际生产过程中,对于并发控制你是选择乐观锁还是悲观锁.这两种锁各自的应用环境应该怎样选择? ...

  2. Java开发技巧——并发控制中的乐观锁与悲观锁

    1.为什么需要锁? 在多用户环境中,在同一时间可能会有多个用户新相同的记录,这会产生冲突.这就是的并发性问题. 2.典型的冲突类型: (1)丢失新:一个事务的新覆盖了其它事务的新结果,就是所谓的新丢失 ...

  3. 并发编程中常见的锁机制:乐观锁、悲观锁、CAS、自旋锁、互斥锁、读写锁

    文章目录 乐观锁 VS 悲观锁 悲观锁 乐观锁 CAS CAS机制 ABA问题 CAS的优缺点 互斥锁 VS 自旋锁 互斥锁 自旋锁 对比及应用场景 读写锁 实现方式 读写锁 VS 互斥锁 乐观锁 V ...

  4. 并发控制中的乐观锁与悲观锁

    为什么需要锁(并发控制)? 在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突.这就是著名的并发性问题. 典型的冲突有: (1)丢失更新:一个事务的更新覆盖了其它事务的更新结果,就 ...

  5. mysql默认使用悲观锁_mysql乐观锁和悲观锁详解

    mysql乐观锁和悲观锁详解 相信很多朋友在面试的时候,都会被问到乐观锁和悲观锁的问题,如果不清楚其概念和用法的情况下,相信很多朋友都会感觉很懵逼,那么面试的结果也就不言而喻了. 那么乐观锁和悲观锁到 ...

  6. mysql乐观锁和悲观锁详解

    相信很多朋友在面试的时候,都会被问到乐观锁和悲观锁的问题,如果不清楚其概念和用法的情况下,相信很多朋友都会感觉很懵逼,那么面试的结果也就不言而喻了. 那么乐观锁和悲观锁到底是个什么东西,用它能来做什么 ...

  7. mysql行锁还需要乐观锁吗_mysql行锁、表锁。乐观锁,悲观锁

    锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...

  8. 乐观锁与悲观锁的生动举栗讲解

    一.并发控制 当程序中可能出现并发的情况时,就需要通过一定的手段来保证在并发情况下数据的准确性,通过这种手段保证了当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的.这种手段就叫做 ...

  9. 浅谈实现数据库乐观锁和悲观锁

    目录 数据库乐观锁 适用场景 定义 实现方式 优点与缺点分析 优点 缺点 案例 数据库悲观锁 适用场景 定义 实现方式 悲观锁优缺点分析 优点 缺点 在单实例JVM中,常见的处理并发问题的方法有很多, ...

最新文章

  1. 从父页面在iframe中调用JavaScript代码
  2. 451 Research发布《2019年数据中心服务和基础设施预测》
  3. win7开启uasp协议_UASP与USB模式切换工具(SwitchUA官方版下载_UASP与USB模式切换工具(SwitchUASP) v1.0免费版 - Win7旗舰版...
  4. 在AWS Elastic MapReduce上运行PageRank Hadoop作业
  5. oracle更换rac节点,Oracle-rac 更改VIP地址—2节点的
  6. 编译原理词法分析实验
  7. 如何快速重置OUTLOOK2013,2016到初始配置状态,outlook 修改数据文件位置
  8. [Ext JS 4] 实战之Grid, Tree Gird 添加按钮列
  9. 【FFMPEG系列】windows下编译ffmpeg且加入libx264
  10. ElementUI:tree组件背景色、鼠标hover悬浮背景色、选中背景色修改
  11. schedule java_Schedule.java
  12. 用mysql求同类型用户重合度_匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来_PHP教程...
  13. mysql中set names_深入理解mysql SET NAMES和mysql(i)_set_charset的区别
  14. 语音增强二,麦克风阵列
  15. fw325r虚拟服务器,fw325r管理页面
  16. C 语言 去除字符串中空格函数
  17. 报错 Tensorflow 2.0 Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
  18. 虾皮shopee根据ID取商品详情 API 返回值说明
  19. ccf公共钥匙盒python_CCF/CSP 公共钥匙盒
  20. i6mA-DNC:基于深度学习的二核苷酸表示预测水稻基因组DNA n6 -甲基腺苷位点

热门文章

  1. (转)使用C#开发ActiveX控件
  2. 84.负载均衡哈希算法:ip_hash与hash模块
  3. 龙族幻想最新东京机器人位置_龙族幻想:最强“人形兵器”格斗家降临卡塞尔学院...
  4. 安卓桌面壁纸_安卓视频桌面哪个好用 让手机桌面更炫酷
  5. 浏览器字体大小设置_max浏览器app-max浏览器安卓版
  6. python3 多线程 threading.local 代理_threading.local的作用?Python每日3题(多线程专题)...
  7. php中的require(),PHP中include()与require()的区别说明
  8. Python:PyCharm选择性忽略PEP8警告
  9. QT SQL使用指南
  10. 印花材料使用过程中的三个常见问题及解决方案