悲观锁和乐观锁
来源:互联网 发布:红米手机壳淘宝 编辑:程序博客网 时间:2024/06/08 15:36
悲观锁:是指每次在操作数据时,总是悲观地认为会有其他事务也会来操作同一数据,因此在整个数据处理过程中,将数据处于锁定状态,悲观锁由数据库来实现,在锁定的时间其他事务不能对数据进行存取,
Hibernate锁模式:
(1).LockMode.NONE
如果缓存中存在对象,直接返回该对象的引用,否则通过select语句到数据库中加载该对象,这是锁模式的默认值
(2)LockMode.READ
不管缓存中是否存在对象,总是通过select语句到数据库中加载该对象,如果映射文件中设置了版本元素,就执行版本检查,比较缓存中的对象是否与数据库中的对象版本一致
(3)LockMode.UPGRADE
不管缓存中是否存在对象,总是通过select语句到数据库中加载该对象,如果映射文件中设置了版本元素,就执行版本检查,比较缓存中的对象是否与数据库中的对象版本一致,如果数据库系统支持悲观锁(如Oracle/MySql),就执行select ….for update语句,如果不支持(如sybase)就执行普通select语句·
(4)LockMode.UPGRADE_NOWAIT
与LockMode.UPGRADE具有同样的功能,此外,对于Oracle等支持update 弄wait的数据库,执行select…for update nowait语句,nowait表明如果执行该select语句的事务不能立即获得悲观锁,那么不会等待其他事务释放锁,而是立即抛出锁定异常
(5)LockMode.WRITE
保存对象时会自动使用锁定模式,仅供HIbernate内部使用,应用程序中不应该使用
(6)LockMode.FORCE
强制更新数据库中对象的版本属性,从而表明当前事务已经更新了这个对象
乐观锁:通常认为多个事务操作同一数据的情况很少发生,因此乐观锁不做数据库层次的锁定,而是基于数据版本标识应用程序级别上的锁定机制。
在Hibernate应用中,乐观锁有两种基于版本控制的实现:
- 基于version的乐观锁
- 基于timestamp的乐观锁
所谓数据版本控制,就是通过为数据库表增加一个“version”字段。读取数据时,将版本号读出和保存时加 1操作,在提交数据时,将现有版本号与数据库记录的版本号进行比较,提交数据的版本号减一等于数据表的版本号,则允许更新数据
- 悲观和乐观锁
- 乐观锁和悲观锁
- 悲观锁和乐观锁
- 乐观锁和悲观锁
- 乐观锁和悲观锁
- 悲观锁和乐观锁
- 乐观锁和悲观锁
- 悲观锁和乐观锁
- 悲观锁和乐观锁
- 悲观锁和乐观锁
- 悲观锁和乐观锁
- 乐观锁和悲观锁
- 乐观锁 和 悲观锁
- 悲观锁和乐观锁
- 乐观锁和悲观锁
- 乐观锁和悲观锁
- 乐观锁和悲观锁
- 乐观锁和悲观锁
- JavaScript对DOM节点进行操作(不使用第三方框架)
- Centos7 下 Nagios 的安装
- setNeedsDisplay,setNeedsLayout,layoutSubviews,drawRect的调用关系
- Discuz3.3搭建在Docker环境
- Java中静态块、静态变量执行步骤详解
- 悲观锁和乐观锁
- Python股票处理之二_数据存盘
- eclipse中DeplaymentAssembly,Java Build Path,Java Compiler,Project Facets的作用
- TabbarController的封装
- Entity Framework 6 Code First新特性:支持存储过程
- Android 蓝牙的基本使用方法
- Python 获得命令行参数的方法
- Person Re-identification Overview
- 如何从另一个PPT中提取母版(WPS)