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

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

例如:

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

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

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

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


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


阅读更多
个人分类: spring
想对作者说点什么? 我来说一句

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

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭