并发安全问题(超卖问题)

一,问题解析


  • 超买问题就是,原本库存中有200件库存,结果由于并发问题售出了300件这就是炒卖问题
  • 对于买东西无非就是 查询商品,判断库存是否充足,如果充足则下单成功。
  • 这里采用的是先查询,再判断,再更新的方案,而以上三步操作并不具备原子性。单线程的情况下确实没有问题。但如果是多线程并发运行,如果N个线程同时去查询(N大于剩余库存),此时大概率查询到的库存是充足的,然后判断库存自然没问题。最后一起更新库存,自然就会超卖。

 

二,问题的解决


加锁:锁可以分为悲观锁---乐观锁

1,解决库存超卖问题

  • 何为悲观锁?

    • 每次读取数据时都上锁,防止别人操作数据,就是将并行转为串行

    • 就是通过Synchronized和ReentrantLock对代码进行加锁

    • 优点

      • 安全性非常高

    • 缺点:

      • 性能较差

  • 乐观锁

    • 不会上锁,假设多用户并发的不会产生安全问题,因此无需独占和锁定资源。但在更新数据前,会先检查是否有其他线程修改了该数据

    • 就是通过修改数据库修改语句的条件,一般就是判断当前库存是否大于0,大于0就可以更新数据


  • 悲观锁:添加同步锁,让线程串行执行

    • 优点:简单粗暴

    • 缺点:性能一般

  • 乐观锁:不加锁,在更新时判断是否有其它线程在修改

    • 优点:性能好

    • 缺点:存在成功率低的问题

 

 2,解决限制用户购买商品超卖问题

出现的问题:同一个用户同一时间使用多个线程同时购买就会导致用户抢到很多次商品。


问题解决:使用悲观锁解决,使用同步代码块解决,这样锁的就是当前对象

解决方案很简单,就是调整边界:

  • 业务开始前,先获取锁,再开启事务

  • 业务结束后:先提交事务,再释放锁

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

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

相关文章

【漏洞复现】锐捷 EWEB auth 远程命令执行漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

WEB接口测试之Jmeter接口测试自动化 (二)(数据分离)

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

TCP重传机制、滑动窗口、拥塞控制

一、总述 TCP,Transmission Control Protocol,是一个面向连接、基于流式传输的可靠传输协议,考虑到的内容很多,比如数据包的丢失、损坏、分片和乱序等,TCP协议通过多种不同的机制来实现可靠传输。今天,重点…

通知:T3学员领取资料391-395

各位T3学员∶本周VBA技术资料增加391-395讲,看到通知后联络我(微:VBA6337)免费领取资料。成果来之不易,您更新后请说声谢谢,感恩我的成果。 MF391:选择同颜色的单元格 MF392:连接范…

SAP 消息编号 M8147

月末执行物料分类账的时候,出现以下报错 解决方法:OBYC-PRM

Kafka面经

1.Kafka如何保证消息不丢失 生产者: 1.Producer 默认是异步发送消息,这种情况下要确保消息发送成功,有两个方法 a. 把异步发送改成同步发送,这样 producer 就能实时知道消息发送的结果。 b. 添加异步回调函数来监听消息发送的结…

排序二叉树

参考 Binary Search Tree Visualization (usfca.edu) 一、构建排序二叉树 注意引用 tree /*** 构造二叉排序树* param tree* param x*/ void buildTree(BSTree &tree,ElementType &x){if (treeNULL){tree(BSTree) calloc(1, sizeof(BSTNode));tree->datax;//注意ret…

【算法集训】基础算法:递推 | 概念篇

前言 递推最通俗的理解就是数列,递推和数列的关系就好比 算法 和 数据结构 的关系,数列有点像数据结构中的顺序表,而递推就是一个循环或者迭代的枚举过程。 递推本质上是数学问题,所以有同学问算法是不是需要数学非常好&#xff…

【考研数学】李林《880》vs 李永乐《660》完美使用搭配

没有说谁一定好,只有适不适合自身情况,针对自身弱点选择性价比才最高。 两者侧重点不同,660适合强化前期,弥补基础的不足,880适合强化后期,题型全面,提高我们对综合运用知识的能力。 选择习题…

B端系统优化,可不是换个颜色和图标,看看与大厂系统的差距。

Hi,我是贝格前端工场,优化升级各类管理系统的界面和体验,是我们核心业务之一,欢迎老铁们评论点赞互动,有需求可以私信我们 一、不要被流于表面的需求描述迷惑。 很多人找我们优化系统界面,对需求总是轻描淡…

7-4 哲哲打游戏(Python)

哲哲是一位硬核游戏玩家。最近一款名叫《达诺达诺》的新游戏刚刚上市,哲哲自然要快速攻略游戏,守护硬核游戏玩家的一切! 为简化模型,我们不妨假设游戏有 N 个剧情点,通过游戏里不同的操作或选择可以从某个剧情点去往另…

软件功能鉴定

软件鉴定 ,软件功能鉴定,软件质量鉴定 软件产品质量鉴定:对于各种APP,软件,系统进行鉴定。