记录一次使用悲观锁防止超卖的demo实例。环境配置可以参照我上篇笔记
此处只展示核心代码
代码
//先查库存
Device device = deviceMapper.selectByIdUpdate(3); // 核心为该行代码
//Thread.sleep(3000);
if (device.getSortNum() > 0) {
System.out.println("当前库存是:" + device.getSortNum());
int i = device.getSortNum() - 1;
device.setSortNum(i);
Integer integer = deviceMapper.updateById(device);
Device device1 = deviceMapper.selectById(3);
System.out.println("抢到商品,当前减后库存是:" + device1.getSortNum());
System.out.println("成功");
} else {
System.out.println("当前没抢到线程是:" + Thread.currentThread().getName());
System.out.println("没有库存了");
}
其实只是在第一行查询那添加一个for update进行行锁的控制
可参照链接:https://blog.csdn.net/cxclll/article/details/130602547
以上内容为我学习笔记,如有问题请联系我删除
标签:悲观,System,println,getSortNum,防止,device,超卖,out From: https://www.cnblogs.com/qwg-/p/17980260