zoukankan      html  css  js  c++  java
  • 【JavaP6大纲】MySQL篇:悲观锁、乐观锁、排它锁、共享锁、表级锁、行级锁,死锁

    悲观锁、乐观锁、排它锁、共享锁、表级锁、行级锁,死锁?

    悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。适用于写为居多的场景下。比如行锁,表锁等,读锁,写锁,syncronized实现的锁等。sql中实现悲观锁,使用for update对数据加锁,例如:select num from goods where id = 1 for update;

    乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,在表中增加一个版本(version)或时间戳(timestamp)来实现。适用于读为居多的场景下。乐观锁适用于多读的应用类型,这样可以提高吞吐量。

    工作流程:
    获取当前数据版本
    更新操作版本号+1
    提交更新时,获取版本号
    比较提交时的版本号与第一次获取的版本号,如果一致,那么认为资源是最新的,可以更新
    否则回滚或者抛出异常

    案例:
    事务一开启,男柜员先执行读操作,取出金额和版本号,执行写操作,此时金额改为 120,版本号为1,事务还没有提交
    事务二开启,女柜员先执行读操作,取出金额和版本号,执行写操作,此时金额改为 50,版本号变为 1,事务未提交

    现在提交事务一,金额改为 120,版本变为1,提交事务。理想情况下应该变为 金额 = 50,版本号 = 2࿰

  • 相关阅读:
    cshtml折叠
    toggleClass通过切换类实现样式变换
    Spring Initailizr(项目初始化向导)
    @EnableConfigurationProperties + @ConfigurationProperties 注解
    @Component + @ConfigurationProperties 注解
    入门案例(hello-springBoot)
    SSM 项目整合(书籍管理系统)
    SSM 项目整合 (用户管理系统)
    SpringBoot 配置
    SpringBoot 概念
  • 原文地址:https://www.cnblogs.com/javawxid/p/15644448.html
Copyright © 2011-2022 走看看