黑马点评03一人一单

实战篇-07.优惠券秒杀-实现一人一单功能_哔哩哔哩_bilibili

1.之前的问题

虽然解决了超卖问题,但是无法保证一人只能买一张,容易发生黄牛行为。

2.解决方案

2.1订单查询:判断该用户是否已下单

在库存判断之前,判断用户id和优惠券id是否已经存在,如果存在就停止

但是因为先判断再执行,仍然会出现多线程穿插执行的情况。

为了解决多线程冲突,要加锁

乐观锁因为要根据修改判断版本号,所以只能适用于更新情况。对于多线程查询情况只能用悲观锁。

2.2对订单查询加悲观锁sychronized锁

但是没必要对整个方法加锁,所以这里把后面5,6,7封装到createVoucherOrder方法里。

2.2.1 

如果对整个方法加sychronized锁,那么锁监视器是this(当前对象),那么不管什么用户来,监视器都是this,相当于串行执行了,性能差。

2.2.2

一人一单是同一个用户来造成的并发安全问题,所以需要用某个用户的特征作为锁监视器,锁住某个用户的并发操作,而不影响不同用户之间的操作。

toString返回值会new一个String,所以每次都是新对象,即便是同一个用户,每次的锁监视器都不一样。

 

2.2.3

所以需要intern()方法,相当于只要内容一样,就返回常量池中那个String的地址,而不会返回toString new的地址。

这样就能保证只要用户id一样,字符串内容一样,就能从常量池获取一样的引用返回值,从而保证同一用户锁监视器的一致性。

2.2.4释放锁的时机

因为上述代码锁只到return,而spring会在return之后函数结束之后才提交数据库事务,因此在锁释放到事务提交期间仍有并发问题,所以要把锁括住整个业务函数。

基本解决一人一单问题

2.2.5事务失效

spring 事务失效的 12 种场景_spring 截获duplicatekeyexception 不抛异常-CSDN博客

Spring同一个Service类非事务方法调用事务方法事务失效解决方案-CSDN博客 

java代理对象_java 什么是代理对象-CSDN博客 

但是该代码调用事务业务的时候的this不能处理事务,所以有事务失效的可能。所以要拿当前对象的代理对象

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/222556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈NLP和大模型的关系

目录 一、什么是NLP 二、NLP的应用举例 三、NLP的Python实现举例 四、NLP和大模型的关系 五、NLP的难点 5.1 内容的有效界定 5.2 消歧和模糊性 5.3 有瑕疵的或不规范的输入 5.4 语言行为与计划 六、研究热点 一、什么是NLP 如果单独说NLP这3个字母,具有两…

聚类笔记:聚类算法评估指标

1 内部评估方法 当一个聚类结果是基于数据聚类自身进行评估的,这一类叫做内部评估方法。如果某个聚类算法聚类的结果是类间相似性低,类内相似性高,那么内部评估方法会给予较高的分数评价。不过内部评价方法的缺点是: 这些评估方法…

Linux arm架构下构建Electron安装包

上篇文章我们介绍 Electron 基本的运行开发与 windows 安装包构建简单流程,这篇文章我们从零到一构建 Linux arm 架构下安装包,实际上 Linux arm 的构建流程,同样适用于 Linux x86 环境,只不过需要各自的环境依赖,Linu…

基于Spring Boot和微信小程序的智能小程序商城

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于Spring Boot和微信小程序的智能小程…

运筹学经典问题(六):设施选址问题

问题描述 设施选址问题(Facility Location Problem, FLP)也成选址-分配问题,是企业面临的一类重要问题:在哪里建造设施?建造多少?以及将哪些客户分配给哪些设施去服务? 以物流业的航空站点选…

毕设之-Hlang后端架构-双系统交互

文章目录 前言交互流程基本流程约定公钥人人中台携带公钥获取私钥私钥生成人人中台携带私钥访问私钥验证(博客系统) 调试演示总结 前言 前天我们完成了基本的整合,但是还没有整合到我们的业务系统,也就是博客系统。本来昨天要搞一…

使用 PHP 中的 Invoke 方法实现灵活而强大的调用

在 PHP 中,__invoke 方法是一种特殊的魔术方法,允许对象像函数一样被调用。通过实现 __invoke 方法,你可以使对象变得可调用,这在某些情境下可以提供更灵活和强大的代码结构。本文将介绍如何在 PHP 中使用 __invoke 方法&#xff…

利用闭包与高阶函数实现缓存函数的创建

缓存函数是一种用于存储和重复利用计算结果的机制。其基本思想是,当一个函数被调用并计算出结果时,将该结果存储在某种数据结构中 (通常是一个缓存对象)以备将来使用。当相同的输入参数再次传递给函数时,不再执行实际的计算,而是直…

C# OpenVINO 直接读取百度模型实现印章检测

目录 效果 模型信息 项目 代码 下载 其他 C# OpenVINO 直接读取百度模型实现印章检测 效果 模型信息 Inputs ------------------------- name:scale_factor tensor:F32[?, 2] name:image tensor:F32[?, 3, 608, 608] …

浮动的魅力与挑战:如何在前端设计中巧妙运用浮动(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

Vue3 逻辑复用 - 组合式函数

“组合式函数”(Composables) 是一个利用 Vue 的组合式 API 来封装和复用有状态逻辑的函数。 一个实现实现鼠标跟踪功能 <script setup> import { ref, onMounted, onUnmounted } from vueconst x ref(0) const y ref(0)function update(event) {x.value event.page…

简单的教务系统

#include <stdio.h> #include <string.h> #define N 20 int i,j,n,m,lll0,renshu6; double zcj[N]{0};struct stu{ char num[10]; //学号char name[10]; //姓名char sex; //姓别double score[3]; //3 门课的成绩double sum; //3 门课的总分double aver; //3 门课的…

【docker】docker基本命令

启动类命令 启动docker&#xff1a; systemctl start docker停止Docker&#xff1a; systemctl stop docker重启Docker&#xff1a; systemctl restart docker查看状态&#xff1a; systemctl status docker设置开机自启&#xff1a; systemctl enable docker帮助类命令 …

【XR806开发板试用】+2.鸿蒙内核

非常感谢基于安谋科技STAR-MC1的全志XR806 Wi-FiBLE开源鸿蒙开发板试用活动&#xff01;非常感谢极术社区&#xff01;非常感谢极术小姐姐&#xff01;非常感谢全志在线开发者社区&#xff01;非常感谢通过试用申请&#xff01;非常感谢安谋科技&#xff01; 接上一篇&#xff…

pytorch文本分类(二):引入pytorch处理文本数据

pytorch文本数据处理 目录 pytorch文本数据处理1. Pytorch背景2. 数据分割3. 数据加载Dataset代码分析字典的用途代码修改的目的 Dataloader 4. 练习 原学习任务链接 相关数据链接&#xff1a;https://pan.baidu.com/s/1iwE3LdRv3uAkGGI2fF9BjA?pwdro0v 提取码&#xff1a;ro…

Django和ECharts异步请求示例

前提条件 创建django项目&#xff0c;安装配置过程这里就不讲述了。 后端url http://127.0.0.1:8000/echarts/demo/ view视图函数 from django.http import HttpResponse import jsondef EchartsDemo(request):data {}categories ["衬衫","羊毛衫",&…

Java架构师系统架构高性能维度分析

目录 1 导语2 性能维度概述和定义3 高性能流程4 高性能实现方案-缓存为王5 高性能实现方案-异步为帅、分布式为将6 高性能高并发架构案例分析7 总结想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导语 Java架构师在构建高性能系统架构时,需要关注以下几个关键维度:…

Monkey工具之fastbot-iOS实践

背景 目前移动端App上线后 crash 率比较高&#xff0c; 尤其在iOS端。我们需要一款Monkey工具测试App的稳定性&#xff0c;更早的发现crash问题并修复。 去年移动开发者大会上有参加 fastbot 的分享&#xff0c;所以很自然的就想到Fastbot工具。 Fastbot-iOS安装配置 准备工…

低代码与自动化:加速软件开发的新趋势

低代码与自动化技术正在逐渐改变软件开发的面貌。随着科技的不断发展&#xff0c;传统的编程方式已经不再是唯一的选择。低代码和自动化技术正在为开发者提供更高效、更灵活的开发环境&#xff0c;使得软件开发变得更加简单、快速和高效。 低代码和自动化技术正在逐渐改变软件开…

Linux-----4、关机|重启

# 关机、重启 关机和重启操作只有管理员可以执行&#xff01; # 1、关机命令 shutdown -h now 立刻马上关机 shutdown -h 60 60分钟&#xff08;1个小时&#xff09;后关闭 说明&#xff1a;如果取消在另一终端使用shutdown -c 或者直接ctrlc # 2、重启命令 reboot 重启…