zoukankan      html  css  js  c++  java
  • 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>

    悲观锁

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

    乐观锁与悲观锁的比较

    • 乐观锁:
      • 优势:并发性好,性能较高
      • 确定:用户体验不好,录入半天,提交时被告知已经修改
    • 悲观锁:
      • 优势:会锁住记录,一个用户修改完成前,其他用户不能操作该记录
      • 确定:并发性不好,性能不高
    • 对与悲观锁是针对并发的可能性比较大,而一般在应用中用乐观锁足以
  • 相关阅读:
    APB协议
    AHB总线协议(一)
    C++内存机制中内存溢出、内存泄露、内存越界和栈溢出的区别和联系
    深入理解C++内存管理机制
    c/c++内存机制(一)(转)
    与临时对象的斗争(下)
    与临时对象的斗争(上)ZZ
    C++异常处理解析: 异常的引发(throw), 捕获(try catch)、异常安全
    qt5信息提示框QMessageBox用法
    红黑树
  • 原文地址:https://www.cnblogs.com/chai-blogs/p/13040553.html
Copyright © 2011-2022 走看看