美文网首页
snychronized

snychronized

作者: yinhaijun | 来源:发表于2019-01-21 18:02 被阅读5次

    同步关键字snychronized用于锁定对应的代码,类似于一把锁一把钥匙,当代码并发执行的时候,最先执行的线程先拿到钥匙,打开锁开始执行代码,执行完成以后归还钥匙,然后等待下一个线程获取执行,这种方式保证了代码的安全性,使得代码执行的顺序是线性的,而不会造成数据错误
    比如对金额的操作

        /**
         * 添加synchronized关键字,以防止金额错误
         */
        @Override
        public synchronized void addPrice(long id, BigDecimal price){
            User user = userMapper.selectByPrimaryKey(id);
            BigDecimal socialPriceAmount = user.getSocialPriceAmount();
            User userN = new User();
            userN.setId(id);
            userN.setSocialPriceAmount(socialPriceAmount.add(price));
            userMapper.updateByPrimaryKeySelective(userN);
        }
    

    假设有并发addPrice()的情况,通过snychronized可以保证最终结果的正确性,如果不加,则有可能在查询金额到执行更新操作这段时间内,会发生金额被当前方法的其他线程更新的情况,这样当本次线程最终提交的时候数据就会将其覆盖,则最终得到的是错误数据

    相关文章

      网友评论

          本文标题:snychronized

          本文链接:https://www.haomeiwen.com/subject/hlqhjqtx.html