hibernate基础24:乐观锁和悲观锁

Posted 来临

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate基础24:乐观锁和悲观锁相关的知识,希望对你有一定的参考价值。

乐观锁(Optimistic locking)

  • 顾名思义就是保持一种乐观的态度,认为系统中的事务并发更新不会很频繁,如果冲突了再重新来一次
  • 它的基本思想就是每一次提交事务更新时,想看看要修改的东西从上次读取以后有没有被其他事务修改过,如果修改过,那么更新就会失败。
  • 常用实现方法:实体中增加一个版本控制字段,每次事务更新后就将新版本(version)字段:版本字段的值+1

Java实体bean类

@Version
    private int version;
    
    public int getVersion() {
        return version;
    }
    public void setVersion(int version) {
        this.version = version;
    }

或者不使用注解,配置hbm.xml

<version name="version"></version>

悲观锁

  • 基本思想就是每次一个事务读取某一条记录时,就会把这条记录锁住,其他的事务想要更新,必须等当前事务提交或者回滚解除锁后才能操作(数据库事务隔离级别:可重复读)
  • 悲观锁的实现,依靠数据库提供的锁机制(只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保存外部系统不会修改数据)
  • 配置

乐观锁与悲观锁的比较

  • 乐观锁:
    • 优势:并发性好,性能较高
    • 确定:用户体验不好,录入半天,提交时被告知已经修改
  • 悲观锁:
    • 优势:会锁住记录,一个用户修改完成前,其他用户不能操作该记录
    • 确定:并发性不好,性能不高
  • 对与悲观锁是针对并发的可能性比较大,而一般在应用中用乐观锁足以

 

以上是关于hibernate基础24:乐观锁和悲观锁的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate乐观锁悲观锁和多态

Hibernate 再接触 悲观锁和乐观锁

乐观锁和悲观锁

悲观锁和乐观锁

java中悲观锁和乐观锁的区别

悲观锁和乐观锁,啥情况