`
Terry_zzz
  • 浏览: 6697 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

悲观锁与乐观锁

 
阅读更多

悲观锁: 指在应用程序中显示地为数据资源加锁. 悲观锁假定当前事务操纵数据资源时, 肯定还会有其他事务同时访问该数据资源, 为了避免当前事务的操作受到干扰, 先锁定资源. 尽管悲观锁能够防止丢失更新和不可重复读这类并发问题, 但是它会影响并发性能, 因此应该谨慎使用悲观锁.

 

乐观锁: 乐观锁假定当前事务操纵数据资源时, 不会有其他事务同时访问该数据资源, 因此完全依靠数据库的隔离级来自动管理锁的工作. 应用程序采用版本控制手段来避免可能出现并发问题.

 

悲观锁有两种实现方式:

一: 在应用程序中显示指定采用数据库系统的独占锁来锁定数据资源.

二: 在数据库表中增加一个表明记录状态的LOCK字段, 当它取值为'Y' 时, 表示该记录已经被某个事务锁定, 如果为N 表明该记录处于空闲状态, 事务可以访问它.

 

当事务执行select 语句的时候, 默认情况下, 数据库系统会采用共享锁来锁定查询的记录. 此外MYSQL Oracle Ms SQL都支持以下形式的select 语句:

 

select ... for update

 

以上语句显示的指定采用独占锁来锁定查询的记录.

 

在Hibernate应用中, 当通过Session的get() 和load() 方法来加载一个对象时, 可以采用以下的方式声明使用悲观锁:

session.get(XXX.class, new Long(1), LockMode.UPGRADE)

 

 

 利用Hibernate的版本控制来实现乐观锁

 

乐观锁是由应用程序提供的一种机制, 这种机制既能保证多个事务并发访问数据, 又能防止第二类丢失更新. 可以利用hibernate的版本控制功能来实现乐观锁.

 

在数据库中加入一个字段, VERSION, 每次更新通过session中的实体对象的version属性进行更新, 如session中version为0, 则where version = 0. 否则将抛出异常.

 

 

分享到:
评论

相关推荐

    Hibernate悲观锁与乐观锁

    《Hibernate 悲观锁与乐观锁详解》 在多用户并发访问的环境中,数据库管理系统必须具备有效的数据访问控制机制,以确保数据的一致性和完整性。Hibernate,作为一款流行的Java持久化框架,提供了两种主要的锁定策略...

    Hibernate悲观锁与乐观锁案例

    在Java的持久化框架Hibernate中,悲观锁和乐观锁是两种重要的并发控制策略,它们用于管理数据库中的数据在多线程环境下的访问安全。本文将深入探讨这两种锁机制的原理、应用场景及其区别。 首先,我们来理解悲观锁...

    Java 中的悲观锁和乐观锁的实现

    乐观锁与悲观锁相反,它假定数据不太可能被其他线程或进程修改,因此不会一开始就锁定数据。这种锁机制通常不会直接使用数据库级别的锁定机制,而是通过版本号或其他标记来检测数据是否已被其他事务修改。 **1. ...

    面试必备之乐观锁与悲观锁.pdf

    ### 面试必备之乐观锁与悲观锁详解 #### 一、悲观锁与乐观锁的概念 悲观锁和乐观锁是计算机科学中用于处理并发控制的两种不同策略,它们主要应用于多线程环境下数据的一致性和完整性保护。两种锁的设计哲学反映了...

    mysql 悲观锁与乐观锁的理解及应用分析

    本文实例讲述了mysql 悲观锁与乐观锁。分享给大家供大家参考,具体如下: 悲观锁与乐观锁是人们定义出来的概念,你可以理解为一种思想,是处理并发资源的常用手段。 不要把他们与mysql中提供的锁机制(表锁,行锁,...

    MySQL中的悲观锁与乐观锁

    在关系型数据库中,悲观锁与乐观锁是解决资源并发场景的解决方案,接下来将详细讲解:magnifying_glass_tilted_right:一下这两个并发解决方案的实际使用及优缺点。 首先定义一下数据库,做一个最简单的库存表,如下...

    thinkPHP框架乐观锁和悲观锁实例分析

    除了上述的乐观锁和悲观锁实现技巧之外,ThinkPHP框架还提供了其他很多与数据操作和事务管理相关的功能和技巧。例如,在ThinkPHP中,可以使用事务控制相关的类和方法,如mysqli的transaction方法开始事务,commit...

    数据库事务、hibernate悲观锁和乐观锁

    在处理并发问题时,Hibernate提供了悲观锁和乐观锁两种机制。 悲观锁假设并发环境中的冲突是常态,因此在读取数据时就立即锁定,直到事务结束才释放。在Hibernate中,可以通过设置`@LockModeType.PESSIMISTIC_READ`...

    Hibernate悲观锁和乐观锁的实现

    悲观锁和乐观锁是两种常见的锁定策略,它们各有特点,适用于不同的场景。 **悲观锁**(Pessimistic Lock)的名字来源于其悲观的态度,它认为数据随时可能被其他事务修改,因此在读取数据时就立即进行加锁,防止其他...

    乐观锁与悲观锁

    介绍数据库事务的定义和事务带来的问题,详细讲解乐观锁与悲观锁的区别

    Hibernate的乐观锁与悲观锁

    ### Hibernate的乐观锁与悲观锁 #### 一、引言 在并发环境下,尤其是在金融、电商等业务场景中,确保数据的一致性和完整性至关重要。**Hibernate**作为一种流行的Java持久层框架,提供了多种机制来处理并发控制...

    oracle 乐观锁和悲观锁详细教程

    ### Oracle乐观锁与悲观锁详解 #### 一、Oracle 数据库锁定机制概述 为了提高数据库系统的性能并确保数据的一致性,大多数关系型数据库管理系统都提供了并发控制机制。并发控制的核心在于解决多个用户同时访问同一...

    并发控制—悲观锁和乐观锁

    并发控制—悲观锁和乐观锁

    Hibernate锁机制_悲观锁和乐观锁

    Hibernate 锁机制_悲观锁和乐观锁 Hibernate 锁机制是指在数据库访问中,为了维护数据的一致性和正确性,所采取的一些机制来防止数据的并发访问和修改。 Hibernate 中有两种锁机制:悲观锁和乐观锁。 一、悲观锁...

    [数据库事务与锁]详解七 深入理解乐观锁与悲观锁

    ### 数据库事务与锁:深入理解乐观锁与悲观锁 #### 一、并发控制的重要性 在多用户系统中,特别是数据库管理系统(DBMS)中,确保数据的一致性和事务的隔离性至关重要。当多个事务同时访问同一数据时,如果不加以...

    Hibernate乐观锁和悲观锁分析

    【Hibernate乐观锁与悲观锁详解】 在开发过程中,尤其是在并发环境下,确保数据的一致性和完整性至关重要。Hibernate,作为Java领域广泛使用的ORM框架,提供了一种处理并发数据访问冲突的手段,那就是锁机制。主要...

    悲观锁和乐观锁的技术对比和应用.docx

    悲观锁和乐观锁是两种常见的并发控制策略,用于在多任务环境下确保数据一致性。它们各自有不同的工作原理和适用场景。 悲观锁(Pessimistic Lock)正如其名,它假设并发环境中会发生频繁的冲突,因此在读取数据时就...

    面试必备之乐观锁与悲观锁

    【标题】:“面试必备之乐观锁与悲观锁” 【描述】:“面试必备之乐观锁与悲观锁.pdf”涉及的是并发控制中的两种重要锁机制——悲观锁和乐观锁,它们是多线程环境下确保数据一致性的重要手段。 【标签】:“求职...

Global site tag (gtag.js) - Google Analytics