锁失效的可能场景:
1.多实例模式,众所周知Reentrantlock和synchronized都是对象锁,那假如通过scope注解设置了spring模式为多例模式,那多个请求同时进入不同的实例就会出现并发的问题
2.事务模式,众所周知,加上transactional注解时,会在方法前置开启事务,那假如两个请求同时进入,一个请求获取到了锁,减掉了库存,但是还没提交事务,数据库此时还是原来的库存数,这个时候释放了锁,b获取到了锁,还是读到了原来的数据,这样还是出现了并发的问题
3.集群模式,在集群模式下,多个请求进入不同的服务,同时访问共享资源,因为锁的只是服务的当前实例,每个服务都有不同的实例,就会出现并发问题
java事务锁 java lock 中锁与 @Transactional 同时使用导致锁失效的问题_lock与事务transactional-优快云博客
@Transactional导致锁失效_@transaction注解的方法内加上锁,有问题吗-优快云博客
关于jvm锁失效原因以及解决方案_事务注解造成锁失效-优快云博客