取消购票和出票的并发问题
来源:22-2 购票页面增加取消排队的功能

牛顿第八定律
2024-06-18
老师好,我们在这一节中做了取消车票的情况,在使用乐观锁的情况下,【有时候】出现了用户点击【取消购票】显示取消成功,但是数据库该订单还是Success状态。
看了下日志后。我思考是取消订单也需要耗费时间来处理,有可能会出现订单已经被列入到准备处理的那10条ConfirmOrder的列表中(此时列表中所有的订单都是INIT状态)了。此时再取消订单,会在数据库中短暂存在一个C的状态,但随后又被改为S了,我在sellTicket方法前面加了再次校验该订单是否为CANCEL状态,试想着是去拦截已经被取消的订单,但没能实现想要的结果,订单还是变成了S
可以通过什么方法来防止这种并发问题呢?
写回答
1回答
-
可以在开始出票时,将订单从I改成P,再出票,改的时候加条件:订单必须是I。同理,在取消时将订单从I改成C,改的时候加条件:订单必须是I。这样就可以让这两步变成互斥,要么出票,要么取消
00
相似问题