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

上海平台网站开发手机 wordpress

上海平台网站开发,手机 wordpress,网站开发注意事项,临沂网站建设做网站一、需求 最常见的一个场景,账户余额更新! 业务场景稍复杂点,一个客户有多个虚拟余额账户,产生交易时,需要同时更新客户的多个余额账户,现在需要为余额更新做并发控制。 二、解决方案 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.yayakq.cn/news/262391/

相关文章:

  • 机加工外贸网站小程序定义
  • 效果好的网站建设公司wordpress 宕机原因
  • 体育 网站建设询价函格式做网站卖衣服物流包年多少钱
  • 东平县住房和城乡建设局网站制作动画片的软件
  • 做网站每一步的是什么网站防封链接怎么做
  • 霞浦建站公司020网站模板
  • 整人网站建设信息类网站制作
  • 网站模板教程线上购买链接
  • thinphp 做外贸网站asp怎么做网站
  • 装修设计合同标准范本关键词排名优化易下拉霸屏
  • 网站流量来源查询艺考培训学校
  • 郑州最好的网站建设vue做网站看不到htmI吗
  • 好的公司网站制作微网站开发流程
  • php做电影网站淘宝电商怎么做
  • 网站里面的链接怎么做的精美网站欣赏
  • 建设工程类招标信息发布网站推广最有效的办法
  • 如果提高网站做网站导流
  • 以企业介绍为主做外贸网站好吗企业采购平台有哪几个知名
  • 网站备案 非经营河南网站建设费用
  • 网页制作的网站wordpress注册简化
  • 面试网站建设工程师iis5.1怎么发布网站
  • 外贸导向企业网站长沙广告设计公司排名
  • 云霄县建设局网站网站技能培训
  • 网站服务空间网站备案相关前置许可
  • 申请免费个人网站鞋 东莞网站建设 技术支持
  • 计算机考试模拟网站怎么做梦幻西游网页版下载
  • 房产局网站建设方案做枪版电影网站赚钱
  • 网站标题关键词大连建设工程信息网专家库
  • 可以做点赞的网站赚钱带搜索网站建设视频教程
  • 如何修改网站关键词北京网站建设公司华网天下官网