• java----乐观锁


    乐观锁实现重试机制

    //乐观锁冲突最大重试次数
        private static final int DEFAULT_MAX_RETRIES = 5;
        /**
         * 减少库存,每次减一
         *
         * @return
         */
        public boolean reduceStock(GoodsVo goods) {
            int numAttempts = 0;
            int ret = 0;
            SeckillGoods sg = new SeckillGoods();
            sg.setGoodsId(goods.getId());
            sg.setVersion(goods.getVersion());
            do {
                numAttempts++;
                try {
                    sg.setVersion(goodsMapper.getVersionByGoodsId(goods.getId()));
                    ret = goodsMapper.reduceStockByVersion(sg);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                if (ret != 0)
                    break;
            } while (numAttempts < DEFAULT_MAX_RETRIES);
    
            return ret > 0;
        }
    

      

    @Mapper
    public interface GoodsMapper {
        //stock_count > 0 和 版本号实现乐观锁 防止超卖
        @Update("update sk_goods_seckill set stock_count = stock_count - 1, version= version + 1 where goods_id = #{goodsId} and stock_count > 0 and version = #{version}")
        public int reduceStockByVersion(SeckillGoods seckillGoods);
    
        // 获取最新版本号
        @Select("select version from sk_goods_seckill  where goods_id = #{goodsId}")
        public int getVersionByGoodsId(@Param("goodsId") long goodsId);
    }
    

      

  • 相关阅读:
    BZOJ4223 : Tourists
    BZOJ3565 : [SHOI2014]超能粒子炮
    BZOJ3499 : PA2009 Quasi-template
    BZOJ3490 : Pa2011 Laser Pool
    BZOJ2828 : 火柴游戏
    BZOJ3070 : [Pa2011]Prime prime power 质数的质数次方
    BZOJ2138 : stone
    BZOJ2167 : 公交车站
    BZOJ1290 : [Ctsc2009]序列变换
    Ural2110 : Remove or Maximize
  • 原文地址:https://www.cnblogs.com/yanxiaoge/p/14154882.html
Copyright © 2020-2023  润新知