并发超卖情况的解决方案(有待更新)
作者:互联网
并发超卖情况的解决方案(有待更新)
一、悲观锁
加上synchronized
错误示范,在方法名上直接加synchronized
错误原因:Transactional
开启了事务控制,这里会有一个线程同步,synchronized
也会有一个线程同步,而事务的线程同步范围要更大。synchronized
的代码块确实是能保证线程是排队走的,但是synchronized
代码块结束之后,事务可能还没有结束,事务还没有提交,但锁已经释放了,这时候下一个线程来了,这时候事务再提交,数据就可能出现多提交的问题了
解决方式1(不推荐):把Transactional
给去掉,只使用synchronized
保证线程同步
解决方式2:在控制器调用处添加synchronized
,这样它的线程同步范围是一定比Transactional
要大的
总结:不推荐使用悲观锁,因为会让线程排队,容易造成线程阻塞,速度较慢
二、乐观锁
说明:使用乐观锁解决商品的超卖问题,实际上是把主要防止超卖问题交给数据库解决利用数据库中定义的version
字段以及数据库中的事务
实现在并发情况下商品的并发超卖问题
- 大致理解
- mapper
- service
标签:事务,同步,synchronized,解决方案,并发,线程,超卖 来源: https://www.cnblogs.com/ximensama/p/15038539.html