美文网首页
乐观锁和悲观锁

乐观锁和悲观锁

作者: 程序员财富自由之路 | 来源:发表于2017-11-05 14:48 被阅读19次

悲观锁与乐观锁的定义:

悲观锁,顾名思义,就是悲观,每次认为去取数据的时候别人都会修改,因此每次去取数据的时候都会进行上锁。也即是说,如果某个事务执行操作应用了锁, 那么只有等这个事务释放了锁,其他事务才能操作该数据。

   乐观锁,顾名思义,每次都很乐观,认为去取数

据的时候,别人不会修改数据, 只有当修改提交更新的时候,才会对数据进行冲突与否检测,当数据发生冲突时候,会返回用户错误信息,让用户决定如何去做。

悲观锁,乐观锁的使用:

看个乐观锁的应用:

int updatedRows = connectionFromHabibMarwan.createStatement()

.executeUpdate("update items set release_date = current_date() + 10," +"  version = version + 1" +"where name = 'CTU Field Agent Report'" +" and version = 0");

System.out.println("Rows updated by Habib Marwan: " +updatedRows);

//这一行是很多Java框架进行乐观锁检测的方法,检测真正更新的记录数。

if (updatedRows == 0) throw new OptimisticLockingException();

上面可以看到乐观锁是提交更新时候才检测有没有数据冲突。

看个悲观锁的应用:

connectionFromJackBauer.setAutoCommit(false);

//然后jack要修改这条记录,确保同时没有其他人访问

connectionFromJackBauer.createStatement().execute("select * from items where " +"name = 'CTU Field Agent Report' for update");

// TODO update the row, etc.

System.out.println("Jack Bauer locked the row for any " +"other update");

上面可以看到悲观锁select * form table  for upadate 

只有当该事物释放锁之后才能进行其他事务操作。

悲观锁和乐观锁的优缺点:

悲观锁是先取锁然后再访问, 对数据安全性有了保证, 但是在效率方面,加锁会产生额外的开销,并且增加了死锁的机会。;对于只读事务,没必须对数据加锁,使用悲观锁会加重负载;并且对于高并发系统,如果  使用悲观锁,当一个事物获得锁,其他事务必须等待,这样降低了事务的并行性。

乐观锁是 孔祥重教授提出来的,是基于数据竞争的概率比较小,可以尽可能的做下去只是在提交时才锁定,因此不会造成死锁,但是当两个事务都是读取同一行数据,经修改后,写回数据库,那么这时就会抛出异常。

相关文章

  • 看完你就知道的乐观锁和悲观锁

    看完你就知道的乐观锁和悲观锁 Java 锁之乐观锁和悲观锁 [TOC] Java 按照锁的实现分为乐观锁和悲观锁,...

  • 乐观锁和悲观锁

    参考来源 深入理解乐观锁与悲观锁 乐观锁的一种实现方式——CAS mysql乐观锁总结和实践 乐观锁和悲观锁 悲观...

  • 锁的概述

    乐观锁与悲观锁 悲观锁 乐观锁和悲观锁的概念出自数据库,但在java并发包中也引入和类似的概念(乐观锁/悲观锁是一...

  • 并发参数

    悲观锁与乐观锁 悲观锁 synchronized和ReentrantLock等独占锁就是悲观锁思想的实现乐观锁一般...

  • CAS 与原子操作

    乐观锁与悲观锁 锁可以从不同的角度分类。其中,乐观锁和悲观锁是一种分类方式。 乐观锁:乐观锁又称为“无锁”。乐观锁...

  • 04 番外(待补充AQS相关原理) Java多线程中的各种锁

    1 乐观锁 悲观锁 1.1 乐观锁 乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设...

  • Mysql锁

    按照使用方式,锁分为: 悲观锁 乐观锁 乐观锁 概念就不细讲了,乐观锁和悲观锁的区别是乐观锁是假设在修改数据之前,...

  • MySQL之乐观锁·MVCC

    一、 乐观锁 和 悲观锁 乐观锁 和 悲观锁 是实现并发操作的两种不同的 加锁思想,其中: 乐观锁 假设:操作能成...

  • 蚂蚁面试

    1、mysql乐观锁和悲观锁的区别? 乐观锁通过MVCC,版本实现,悲观锁select... for update...

  • 一文简介乐观锁和悲观锁

    悲观锁和乐观锁的概念 乐观锁和悲观锁在面试过程中是经常遇到的,那么什么是乐观锁什么是悲观锁呢?首先需要明确的是乐观...

网友评论

      本文标题:乐观锁和悲观锁

      本文链接:https://www.haomeiwen.com/subject/lxwcmxtx.html