关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、418799587 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 12742|回复: 0

数据库高频率读写问题

[复制链接]
发表于 2016-9-25 17:05:54 | 显示全部楼层 |阅读模式
        @Override
        public synchronized BigDecimal UpdateUserBalance(String userid ,BigDecimal price, boolean flag) {
                SjUserBalance sjUserBalance = this.getEntity(SjUserBalance.class, userid);
                BigDecimal curbalance;
                if(flag){
                        curbalance = sjUserBalance.getBalance().subtract(price);
                }else{
                        curbalance = sjUserBalance.getBalance().add(price);
                }
                sjUserBalance.setBalance(curbalance);
                this.updateEntitie(sjUserBalance);
                return curbalance;
        }
这是修改用户数据balance自段的方法,调用频率很高,已经做了synchronized,防止并发操作,但是存在一个问题,当调用频率间隔小于30毫秒时就会出现问题,比如:
balance初始值为1000
第一次调用减50,剩余950
第二次调用加50,剩余1000
第三次调用减50,这时候就出问题了,使用this.getEntity取出来的值是950,正确的应该是1000
用jdbc也试过,一样的情况,帮忙解答下

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表