Spring中的ReentrantLock

 在controller类中lock

private static final ReentrantLock lock = new ReentrantLock(false);
    @RequestMapping(value = "/")
    private String index(HttpServletRequest request) {
        return "index";
    }

    @RequestMapping(value = "/purchase")
    public String purchase(){
        try{
            lock.lock();
            String msg = syncXyUserService.purchase();
            return msg;
        }catch (Exception e){
            log.error("程序出现异常");
        }finally {
            lock.unlock();
        }
        return "购物失败";
}

 purchase对应的类上加事物注解@Transactional

public String purchase() {
        String msg = "";
                try{
                    Product product = productDao.findById(1L).orElse(null);
                    Integer leave = product.getLeave();
                    if(leave == 0){
                        msg = Thread.currentThread().getName() + ":购买失败";
                        log.error(Thread.currentThread().getName() + ":购买失败");
                    }else{
                        leave = leave - 1;
                        product.setLeave(leave);
                        productDao.update(product,true);
                        msg = Thread.currentThread().getName() + ":购买成功,剩余" + leave;
                        log.info(Thread.currentThread().getName() + ":购买成功,剩余" + leave);
                    }
                }catch (Exception e){
                    log.error("程序出错啦");
                }finally {
                }
            return msg;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值