spring @transactional 和synchronized同时使用不能同步的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011186019/article/details/52348624

如果在service层的方法上同时使用事务和锁无法保证同步

例如:

@Service
public class Demo{
     @Transactional
     public void synchronized  update() {
          ............
     }
}

上面这个例子是无法保证数据的一致性

由于spring的aop,会在update方法之前开启事务,之后再加锁,当锁住的代码执行完成后,在提交事务,

因此synchronized代码块执行是在事务之内执行的,可以推断在代码块执行完时,事务还未提交,其他线程进入synchronized代码块后,读取的库存数据不是最新的。


解决上面的方法,可以在update方法之前加上synchronized,在还没有开事务之间就加锁,那么就可以保证线程同步


展开阅读全文

没有更多推荐了,返回首页