乐观锁和悲观锁

技术乐观锁和悲观锁 乐观锁和悲观锁悲观锁:具有强烈的独占和排他特性。它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度。因此,在整个数据处理过程中,将数据处于锁定

乐观锁和悲观锁。

悲观锁:具有很强的排他性和排他特性。是指外界对数据修改的保守态度(包括系统当前的其他事务和来自外部系统的事务)。因此,在整个数据处理过程中,数据是被锁定的。悲观锁的实现往往依赖于数据库提供的锁机制(只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则即使在这个系统中实现了锁机制,也不能保证外部系统不会修改数据)。

之所以叫悲观锁,是因为它是一种对数据修改持悲观态度的并发控制方法。总是假设最坏的情况。每次读取数据时,您默认其他线程会更改数据,因此您需要锁定它。当其他线程想要访问数据时,您需要阻塞并挂起它。悲观锁的实现:

1.传统的关系数据库使用这种锁定机制,如行锁、表锁、读锁、写锁等。所有这些都在操作前锁定。

2.同步关键字在Java中的实现。

悲观锁主要分为共享锁和排他锁:

共享锁[共享锁]也称为读锁,简称S锁。顾名思义,共享锁是指多个事务可以共享同一个数据的锁,所有事务都可以访问数据,但只能读取,不能修改。

排它锁[排它锁]也叫写锁,简称X锁。顾名思义,排他锁不能和其他锁共存。如果一个事务获得了一个数据行的排他锁,那么其他事务就不能获得该行的其他锁,包括共享锁和排他锁。获取的排他锁事务可以读取和修改数据行。

乐观锁定:乐观锁定是一种相对悲观的锁定。乐观锁定假设数据的一般情况不会引起冲突,因此在数据提交更新时,会正式检查数据是否存在冲突。如果是冲突的,它会向用户返回异常信息,让用户决定怎么做。乐观锁定适合读多写少的场景,可以提高程序的吞吐量。乐观锁定采用了更宽松的锁定机制。也是避免因数据库假象和业务处理时间过长而导致数据处理错误的机制。但是乐观锁定不会刻意使用数据库本身的锁定机制,而是根据数据本身来保证数据的正确性。乐观锁定的实现:

1.CAS实现:java中java.util.concurrent.atomic包下的原子变量使用乐观锁定的CAS实现方法。

2.版本号控制:通常,数据版本号版本字段被添加到数据表中,以指示数据被修改的次数。当数据被修改时,版本值将为1。当线程A想要更新数据时,也会在读取数据的同时读取版本值。提交更新时,如果刚刚读取的版本值等于当前数据库中的版本值,则在更新成功之前不会更新。

3.乐观并发控制认为事务之间数据竞争的概率比较小,所以尽量直接做,一直锁到提交,这样就不会出现锁或者死锁的情况。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/146470.html

(0)

相关推荐

  • postman自动调用获取token

    技术postman自动调用获取token postman自动调用获取tokenPostman不光支持单次请求,还支持环境变量、全局变量、集合变量
    本文使用Collection Variable
    Coll

    礼包 2021年12月2日
  • 如何理解epoll原理

    技术如何理解epoll原理这篇文章将为大家详细讲解有关如何理解epoll原理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。epoll的系统调用很简单,只有三个,其定义如下

    攻略 2021年11月19日
  • java bean与ejb有哪些区别

    技术java bean与ejb有哪些区别这篇文章主要为大家展示了“java bean与ejb有哪些区别 ”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java bean与ej

    攻略 2021年12月3日
  • 如何进行Java语言规范线程形式的分析

    技术如何进行Java语言规范线程形式的分析如何进行Java语言规范线程形式的分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在一开始接触Java的时候我们

    攻略 2021年11月21日
  • MapReduce的工作原理是什么

    技术MapReduce的工作原理是什么本篇文章为大家展示了MapReduce的工作原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。开始聊mapreduce,mapredu

    攻略 2021年12月3日
  • Java怎么比较两个对象并获取不相等的字段

    技术Java怎么比较两个对象并获取不相等的字段这篇文章主要介绍“Java怎么比较两个对象并获取不相等的字段”,在日常操作中,相信很多人在Java怎么比较两个对象并获取不相等的字段问题上存在疑惑,小编查阅了各式资料,整理出

    攻略 2021年11月25日