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

张家港网站建设早晨设计seo是什么级别

张家港网站建设早晨设计,seo是什么级别,河北邯郸房产网,2023年最新疫情一、需求 最常见的一个场景,账户余额更新! 业务场景稍复杂点,一个客户有多个虚拟余额账户,产生交易时,需要同时更新客户的多个余额账户,现在需要为余额更新做并发控制。 二、解决方案 1、依赖数据的乐观锁&…

一、需求

        最常见的一个场景,账户余额更新! 业务场景稍复杂点,一个客户有多个虚拟余额账户,产生交易时,需要同时更新客户的多个余额账户,现在需要为余额更新做并发控制。

二、解决方案

        1、依赖数据的乐观锁,内存中不做更新余额的判断,update语句中增加条件,扣减的金额必须小于当前余额,代码中以返回的更新行数判断是否扣减成功。

        2、由于一些原因,逼着这里采用的是代码中加锁来解决的,首先需要明确一个前提,如下代码中加同步锁的方案是针对单节点的服务,若是多节点,则无法控制并发了。

三、核心代码

锁的颗粒度:最暴力的同步锁就是整个方法加同步,这样是以牺牲接口性能为代价一刀切的做法,笔者这里实现的是按客户余额账号加锁,同一个账号(账号唯一)更新余额加锁控制即可,不同的账户可以同时更新余额,逻辑上并不冲突。

/*** 账户信息*/
@Slf4j
@Component
public class AccountDemo{// 同步锁容器,一定注意容器必须是线程安全的private final Map<String, Object> accountLocks = new ConcurrentHashMap<>();public int updateBalance( String accountNo, long amount) {if (StrUtil.isBlank(accountNo)) {throw new ServiceException(EnumErrorCode.EC_COMMON_REQ_PARAM_ERROR);}if (amount == 0) {log.warn("amount is zero.");return 1;}// 根据账户ID获取或创建锁对象Object lock = accountLocks.computeIfAbsent(accountNo, k -> new Object());synchronized (lock) {// 判断客户余额是否充足if (checkBalance(accountNo, amount)) {throw new ServiceException("余额不足!"); }// 更新余额代码实现int update = updateBalance(accountNo, amount);}return update;}}

注意:该方法或方法上游加事务控制要特别小心,笔者在外层增加了事务控制,就导致了方法里面锁的执行顺序控制失效了!

http://www.tj-hxxt.cn/news/85286.html

相关文章:

  • 品牌网站建设有哪些方面百度大数据预测平台
  • 上海网站营销推广广告优化师适合女生吗
  • 池州网站建设公司百度seo网站
  • 中国最好的做网站高手自动连点器
  • 网站开发项目计划wbs百度推广价格
  • wordpress删除作者信息厦门网站seo哪家好
  • 新手学网络运营要多久优化网站打开速度
  • 微信注册网站入口安卓优化
  • 郑州网站建设市场关键词排名点击
  • 外贸网站源码 php网络网站推广
  • 手机可以建立网站吗家庭优化大师免费下载
  • 怎么提高网站打开速度关键词排名优化工具
  • 网站快照怎么做免费聊天软件
  • 天河做网站技术广州疫情最新消息
  • 贵州网站建设费用seo优化软件哪个好
  • 电子化业务管理与网站建设北京公司排名seo
  • 网站代码 字体发文章用哪个平台比较好
  • 怎么找做网站客服的工作南昌百度seo
  • 广州网站建设案件大数据精准获客软件
  • 百度seo优化技巧seo专家招聘
  • 宜兴网站建设网站seo好学吗
  • 我不想找之前做网站的续费semseo
  • ae模板网站推荐乔拓云智能建站系统
  • 网站模板开发平台怎么做数据分析平台
  • 网站建设 枫子科技丽水网站seo
  • python做项目的网站厦门seo优化外包公司
  • 建站公司互橙知乎北京网站推广公司
  • 凯里网站设计公司哪家好南京百度竞价推广公司排名
  • 做网站背景图片浪漫爱情开发网站的流程是
  • 杭州培训网站建设社交网络推广方法有哪些