Springboot在有锁的情况下怎么正确使用事务(springboot,开发技术)

时间:2024-05-03 00:53:08 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    Springboot%E5%9C%A8%E6%9C%89%E9%94%81%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E6%80%8E%E4%B9%88%E6%AD%A3%E7%A1%AE%E4%BD%BF%E7%94%A8%E4%BA%8B%E5%8A%A1

老话说的好:想要赚钱,就去看看有钱人有什么需求,因为有钱人钱多,所以赚的多。

言归正传,在Java项目的研发中,“锁”这个词并不陌生,最经典的使用场景是商品的超卖问题。

很多Java小白,通常会认为,给代码加上一把“锁”,就能解决多扣库存问题,却忽略了数据库事务的问题,今天我们就来做一个实验,分析一下商品超卖问题。

有一款商品,库存只剩1件。

购买商品时,做三个动作,一是检查库存,二是扣库存,三是生成订单,三个动作在一个事务中执行。

模拟并发场景,使用10个线程同时执行用户购买商品的操作。

首先我们正常编写业务逻辑,用 @Transactional 注解控制事务。

经并发实验,产生了超卖的现象。

这次我们使用 synchronized 关键字给方法加了把“锁”,理论上应该不会产生超卖现象了吧。

经实验,仍然产生了超卖现象。

因为虽然方法被锁住了,可是@Transactional 注解并没有及时的提交事务,导致库存没有及时扣减为0,因此还是超卖了。

这次我们不使用@Transactional 注解管理事务了,改为手动管理事务。

经实验,解决了超卖现象。

本文:Springboot在有锁的情况下怎么正确使用事务的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:CSS样式如何解决文字过长显示省略号问题下一篇:

10 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18