• 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>

    悲观锁

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

    乐观锁与悲观锁的比较

    • 乐观锁:
      • 优势:并发性好,性能较高
      • 确定:用户体验不好,录入半天,提交时被告知已经修改
    • 悲观锁:
      • 优势:会锁住记录,一个用户修改完成前,其他用户不能操作该记录
      • 确定:并发性不好,性能不高
    • 对与悲观锁是针对并发的可能性比较大,而一般在应用中用乐观锁足以
  • 相关阅读:
    hdu 5326
    校内的没落
    LA 4728 Square ,旋转卡壳法求多边形的直径
    Codeforces Round #256 (Div. 2/A)/Codeforces448A_Rewards(水题)
    【华为OJ平台练习题】求最大公共子串的个数和元素
    CI框架入门中的简单MVC样例
    POJ 1651 Multiplication Puzzle (区间DP)
    IOS开发-提升app性能的25条建议和技巧
    学生信息管理系统-错误‘3021’
    Cloudera Manager和CDH5.8离线安装
  • 原文地址:https://www.cnblogs.com/chai-blogs/p/13040553.html
Copyright © 2020-2023  润新知