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

2021-02-11 16:17

阅读:694

标签:blank   并发   nbsp   体验   lan   span   一个用户   基础   比较   

乐观锁(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:乐观锁和悲观锁

标签:blank   并发   nbsp   体验   lan   span   一个用户   基础   比较   

原文地址:https://www.cnblogs.com/chai-blogs/p/13040553.html


评论


亲,登录后才可以留言!