乐观锁与悲观锁

转载 2018年04月17日 16:40:47

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。
  乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。
  两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果经常产生冲突,上层应用会不断的进行retry,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适。

  数据库的锁机制是在并发任务中确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观锁和悲观悲观锁是并发控制主要采用的技术手段。

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

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

redis的 悲观锁和乐观锁的区别

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据...
  • p_ython
  • p_ython
  • 2017-08-02 23:45:28
  • 538

悲观锁与乐观锁简单介绍

1、悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机...
  • lixiaoxiong55
  • lixiaoxiong55
  • 2016-05-26 22:04:42
  • 1107

oracle的乐观锁和悲观锁

一、问题引出     ① 假设当当网上用户下单买了本书,这时数据库中有条订单号为001的订单,其中有个status字段是’有效’,表示该订单是有效的;     ② 后台管理人员查询到这条001的订...
  • zdp072
  • zdp072
  • 2014-05-05 00:37:01
  • 2317

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

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据...
  • hongchangfirst
  • hongchangfirst
  • 2014-07-08 14:06:58
  • 234506

乐观锁 悲观锁实例

引言 为什么需要锁(并发控制)?   在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。 典型的冲突有: 丢失更新:一个事务的更新覆盖...
  • cws1214
  • cws1214
  • 2016-09-07 10:33:29
  • 1787

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

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

深入理解乐观锁与悲观锁

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

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

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

java面试狂魔之hibernate悲观锁和乐观锁

HR:请谈谈Hibernate悲观锁和乐观锁的原理和应用场景? (ps:虽然现在很多企业都在用mybatis代替hibernate,但hibernate还是有一定地位的,此文仅供吐槽。吐吧。。。。) ...
  • FANTASY522272820
  • FANTASY522272820
  • 2016-03-29 19:45:05
  • 1471
收藏助手
不良信息举报
您举报文章:乐观锁与悲观锁
举报原因:
原因补充:

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