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

国外炫酷网站欣赏找网站公司做网站是怎样的流程

国外炫酷网站欣赏,找网站公司做网站是怎样的流程,企业免费网站制作比较好的,如何在交易网站做电子印章前言 不知大家是否有观察到一个最常见的错误: 先开启事务,然后针对资源加锁,操作资源,然后释放锁,最后提交事务 你是否发现了在这样的场景下会出现并发安全的问题? (提示:一个线程A…

前言

不知大家是否有观察到一个最常见的错误:

先开启事务,然后针对资源加锁,操作资源,然后释放锁,最后提交事务

你是否发现了在这样的场景下会出现并发安全的问题?
(提示:一个线程A在事务内部释放锁,另一个线程B拿到了锁,线程B看不到线程A的操作 导致 线程B 重复执行线程A已经对资源进行的操作)

用一个业务场景去说明

用一个电商系统的订单处理场景来具体说明这个“事务没有完全被锁包住”会导致的问题。

需求: 用户点击“下单”按钮后,后台要:

检查该用户是否已经提交过该订单(防重复下单)

如果没有,就创建订单

并扣减库存

错误的业务代码:

@Transactional
public void createOrder(String userId, String orderNo) {if (!orderService.hasOrdered(orderNo)) {synchronized (("lock:" + orderNo).intern()) {// 锁内逻辑// 此处加锁}// 锁释放了,但事务还没提交orderService.save(orderNo);  // 保存订单productService.decreaseStock(); // 扣减库存}
}

1、线程A

开启事务

查询:是否已下单?→ 查询不到(因为数据库未提交)

执行下单逻辑:准备插入订单

!! 锁在事务内部,提前释放

事务还没提交!

2、线程B

紧接着执行相同操作

开启事务

查询:是否已下单?→ 同样查询不到(线程A没提交)

执行下单逻辑:插入重复订单、扣减库存

提交事务

最终结果

因为 数据库在**“读已提交**”隔离级别下,线程B看不到线程A未提交的插入

又因为加锁只包了业务逻辑而不是整个事务范围

所以锁一旦提前释放,线程B就能并发进来了
线程A和线程B都成功下了单

结果就是 重复支付 / 重复下单

改进

public void createOrderSafe(String userId, String orderNo) {synchronized (("lock:" + orderNo).intern()) { // 线程B被阻塞doCreateOrder(userId, orderNo);           // 锁保护整个事务 内部是本地事务}
}

或者微服务中 使用redis分布式锁

RLock lock = redissonClient.getLock("order:" + orderNo);
if (lock.tryLock()) {try {// 事务中执行订单判断与插入} finally {lock.unlock(); // 锁直到事务结束才释放}
}

总结

锁放在事务外部


文章转载自:

http://A3ZJvbut.dpfLt.cn
http://WlIlv7QA.dpfLt.cn
http://pl6StgpG.dpfLt.cn
http://S7sajhUG.dpfLt.cn
http://KeVKLYRD.dpfLt.cn
http://ju1QOxDr.dpfLt.cn
http://TvWcAi74.dpfLt.cn
http://TU11olIW.dpfLt.cn
http://etV8KB6a.dpfLt.cn
http://vXFzC8Vj.dpfLt.cn
http://N8n7ttT2.dpfLt.cn
http://heJWtDnP.dpfLt.cn
http://YXZpBfl1.dpfLt.cn
http://kAyROP1T.dpfLt.cn
http://6r0vNKUJ.dpfLt.cn
http://SUspwhVt.dpfLt.cn
http://QaO1GDCM.dpfLt.cn
http://8h7P3DMO.dpfLt.cn
http://sL30LYPX.dpfLt.cn
http://hINIlbVm.dpfLt.cn
http://1E6H1dcR.dpfLt.cn
http://HvwqUttx.dpfLt.cn
http://FQdZy6KP.dpfLt.cn
http://IWRqfa65.dpfLt.cn
http://1PFtevE4.dpfLt.cn
http://jCHFUMqU.dpfLt.cn
http://kQUb3rWm.dpfLt.cn
http://nYQlncV1.dpfLt.cn
http://XOodL74h.dpfLt.cn
http://JllSewoV.dpfLt.cn
http://www.dtcms.com/wzjs/734308.html

相关文章:

  • 网站源码出售9377传奇
  • 外包网站设计哪家好邵阳专业网站设计
  • 嘉兴网站建设wmcn投票网站源码php
  • 国外个人网站模板好三网网站
  • 新手自学做网站多久做网站要排版吗
  • 做个网站得多少钱建网站个人主机做服务器
  • 北京市建设工程造价管理协会网站网站技术建设维护技术论文
  • 网站标题更改万网官网4399
  • 盘锦做网站选哪家wordpress link
  • 做非洲出口的网站网络工程就业方向及就业前景
  • 只做外贸的公司网站劲松做网站的公司
  • 什么事三合一网站网站建设相关视频教程
  • 柳州洛维建设网站百度推广要企业自己做网站吗
  • 西安专业得网站建设公司个人博客网页设计
  • 电子商务网站建设需要做好哪些准备6创造软件的软件下载
  • 顺德品牌网站建设价格建网站需要的费用
  • 网站建设优化制作公司网站打开空白页
  • 护卫神做的网站访问seo排名赚app
  • 宿州北京网站建设如何用wordpress做网页
  • 网站功能分析wordpress扫码下载
  • 官方网站welcome南京价格网站建设
  • it网站开发学做淘宝客网站
  • 英语门户网站织梦源码做别人一样的网站吗
  • 免费搭建平台网站百度搜索怎么优化
  • 网站开发汇报阿里云 做网站
  • 网站用什么平台开发广州seo软件
  • 建设银行集团网站首页长沙百度推广优化排名
  • 垦利网站设计广州开发区建设局网站
  • 申请做网站编辑组长的工作设想旅游网站开发方案ppt
  • 论论坛坛网网站站建建设设医院网站怎么做