并发超卖情况的解决方案(有待更新)

并发超卖情况的解决方案(有待更新)

一、悲观锁

加上synchronized

错误示范,在方法名上直接加synchronized

错误原因:Transactional开启了事务控制,这里会有一个线程同步,synchronized也会有一个线程同步,而事务的线程同步范围要更大。synchronized的代码块确实是能保证线程是排队走的,但是synchronized代码块结束之后,事务可能还没有结束,事务还没有提交,但锁已经释放了,这时候下一个线程来了,这时候事务再提交,数据就可能出现多提交的问题了

解决方式1(不推荐):把Transactional给去掉,只使用synchronized保证线程同步

解决方式2:在控制器调用处添加synchronized,这样它的线程同步范围是一定比Transactional要大的

总结:不推荐使用悲观锁,因为会让线程排队,容易造成线程阻塞,速度较慢

二、乐观锁

说明:使用乐观锁解决商品的超卖问题,实际上是把主要防止超卖问题交给数据库解决利用数据库中定义的version字段以及数据库中的事务实现在并发情况下商品的并发超卖问题

  • 大致理解

  • mapper

  • service

posted @ 2021-07-21 10:54  -西门-  阅读(195)  评论(0编辑  收藏  举报