取消购票和出票的并发问题

来源:22-2 购票页面增加取消排队的功能

牛顿第八定律

2024-06-18

老师好,我们在这一节中做了取消车票的情况,在使用乐观锁的情况下,【有时候】出现了用户点击【取消购票】显示取消成功,但是数据库该订单还是Success状态。

看了下日志后。我思考是取消订单也需要耗费时间来处理,有可能会出现订单已经被列入到准备处理的那10条ConfirmOrder的列表中(此时列表中所有的订单都是INIT状态)了。此时再取消订单,会在数据库中短暂存在一个C的状态,但随后又被改为S了,我在sellTicket方法前面加了再次校验该订单是否为CANCEL状态,试想着是去拦截已经被取消的订单,但没能实现想要的结果,订单还是变成了S

可以通过什么方法来防止这种并发问题呢?

写回答

1回答

甲蛙

2024-06-19

可以在开始出票时,将订单从I改成P,再出票,改的时候加条件:订单必须是I。同理,在取消时将订单从I改成C,改的时候加条件:订单必须是I。这样就可以让这两步变成互斥,要么出票,要么取消

0
0

新版Springboot3.0打造能落地的高并发仿12306售票系统

最新版Spring3.0仿12306售票系统实战

852 学习 · 511 问题

查看课程