当前位置: 首页 > news >正文

悲观锁乐观锁与事务注解在项目实战中的应用场景及详细解析

在今天做的项目练习部分中真的学到了很多东西,也补充了许多之前遗漏或是忘记的知识点,但时间精力有限,我就先记录一下今天用到的一个新东西,悲观锁和乐观锁。

首先给出实际应用背景:

在加入锁和事务注解之前,这里有着很明显的并发问题,如果没有红圈中的部分,会出现以下情况

没有锁导致:

①多个用户快速点击,仅剩1张优惠券,却多个用户都抢到了优惠券(即user_coupon中新增了多条记录)!!!

没有事务导致:

①假设在if(i==0)代码块中抛出了异常,但由于没有加入事务注解,因此无法回退,导致了“更新coupon表中的相关数据”这一步造成的影响无法恢复!!!

而加入了悲观锁和事务注解以后就很好的解决了这些并发问题!

=========================================================================

其次这里的使用还有许多细节,eg:

①锁对象用到的是user.toString().intern() 而不是 user.toString()

   (这一点牵扯到了spring的动态代理,我会在明天的博客中解释并把链接粘过来)

②锁和事务的顺序:上锁——>事务开启——>事务上交——>开锁

   (这一点属于事务边界和锁边界问题,同样的,明天补充)

接下来是我用到的一个乐观锁(严格来讲它属于数据库层面的乐观锁机制):

从图中的红圈部分可以看出,它为了避免这一种高并发情况:

①假设有2个用户都通过了之前的层层校验来到了这里,但实际上这里只能再新增1条数据,如果没有红圈中的条件,就会导致增加了2条数据(即issue_num>=total_num),而这并不符合业务逻辑

有了红圈中的类似于乐观锁思想的条件,再进行一次对数据的判断,可以有效解决并发问题!

http://www.dtcms.com/a/331768.html

相关文章:

  • 如何解决EMI中传导干扰
  • Spring-解决项目依赖异常问题
  • 【从零开始java学习|第六篇】运算符的使用与注意事项
  • 因果推断在用户流失预警的案例研究
  • 第2节:多模态的核心问题(多模态大模型基础教程)
  • 【Unity3D】Spine 3.8版本使用记录
  • 机器学习入门:从概念到实践的核心知识梳理
  • 【Linux系统】进程的生命旅程:从创建到独立的演绎
  • 智能体评测技术与实践:从评估维度到DeepEval实战指南
  • LeetCode Day6 -- 图
  • 速卖通商品详情接口深度开发:从多语言解析到跨境合规处理
  • 从零开始搭建React+TypeScript+webpack开发环境——基于MobX的枚举数据缓存方案设计与实践
  • react + i18n:国际化
  • HTML5二十四节气网站源码
  • 【web自动化】-1- 前端基础及selenium原理和环境安装
  • 传输层协议TCP(3)
  • Observer:优雅管理事件订阅的秘密武器
  • TCP 连接管理:深入分析四次握手与三次挥手
  • C++:浅尝gdb
  • 创客匠人:共情力在创始人IP塑造中的作用
  • 使用Docker和Miniconda3搭建YOLOv13开发环境
  • 如何在 Ubuntu 24.04 LTS Noble Linux 上安装 Wine HQ
  • Java多线程进阶-深入synchronized与CAS
  • RS232串行线是什么?
  • 考研408《计算机组成原理》复习笔记,第五章(1)——CPU功能和结构
  • C#WPF实战出真汁01--搭建项目三层架构
  • 解决 pip 安装包时出现的 ReadTimeoutError 方法 1: 临时使用镜像源(单次安装)
  • LeetCode 1780:判断一个数字是否可以表示成3的幂的和-进制转换解法
  • 基于 LDA 模型的安徽地震舆情数据分析
  • 相机Camera日志实例分析之十四:相机Camx【照片后置炫彩拍照】单帧流程日志详解