一分钟教你知道乐观锁和悲观锁的区别

原创 2014年07月08日 14:06:58

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


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


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

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

作者:hongchangfirst

hongchangfirst的主页:http://blog.csdn.net/hongchangfirst


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hongchangfirst/article/details/26004335

乐观锁和悲观锁的区别(最全面的分析)

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据...
  • rexct392358928
  • rexct392358928
  • 2016年08月17日 14:49
  • 15996

最通俗易懂的乐观锁与悲观锁原理及实现

一、乐观锁 总是认为不会产生并发问题,每次去取数据的时候总认为不会有其他线程对数据进行修改,因此不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS操作实现。...
  • L_BestCoder
  • L_BestCoder
  • 2018年02月09日 15:28
  • 1146

深入理解乐观锁与悲观锁

在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。 乐观并发控制(乐观锁)和悲观并发控制(...
  • CCUTwangning
  • CCUTwangning
  • 2016年12月07日 14:08
  • 3146

Java高效并发之乐观锁悲观锁、(互斥同步、非互斥同步)

乐观锁和悲观锁 首先我们理解下两种不同思路的锁,乐观锁和悲观锁。 这两种锁机制,是在多用户环境并发控制的两种所机制。下面看百度百科对乐观锁和悲观锁两种锁机制的定义: 乐观锁( O...
  • truelove12358
  • truelove12358
  • 2017年02月10日 10:48
  • 35122

深入理解乐观锁与悲观锁

在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观并发控制(乐观锁)和悲观并发控制(悲观...
  • zhangwj0101
  • zhangwj0101
  • 2016年03月21日 14:06
  • 6999

关于悲观锁和乐观锁的区别(最直观理解)

悲观锁(Pessimistic Lock):每次拿数据的时候都会担心会被别人修改(疑心重很悲观),所以每次在拿数据的时候都会上锁。确保自己使用的过程中不会被别人访问,自己使用完后再解锁。期间需要访问该...
  • catoop
  • catoop
  • 2015年11月23日 11:59
  • 6483

悲观锁和乐观锁

这方面的资料网上比较多,以下均是转载 1、悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。...
  • sdyy321
  • sdyy321
  • 2011年02月14日 10:40
  • 26078

Java编程:悲观锁、乐观锁的区别及使用场景

定义:悲观锁(Pessimistic Lock): 每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁。由于...
  • claram
  • claram
  • 2016年12月31日 23:51
  • 7943

乐观锁与悲观锁——解决并发问题

乐观锁与悲观锁——解决并发问题 引言 为什么需要锁(并发控制)?   在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。 典型的冲...
  • liao1989126
  • liao1989126
  • 2016年08月12日 23:13
  • 1498

Java 中的悲观锁和乐观锁的实现

锁(locking) 业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算 处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中 (可能是几...
  • linlzk
  • linlzk
  • 2016年02月17日 22:54
  • 19029
收藏助手
不良信息举报
您举报文章:一分钟教你知道乐观锁和悲观锁的区别
举报原因:
原因补充:

(最多只允许输入30个字)