关闭

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

1949人阅读 评论(0) 收藏 举报
分类:

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

例如:

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

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

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

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


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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:123693次
    • 积分:2383
    • 等级:
    • 排名:第15675名
    • 原创:81篇
    • 转载:58篇
    • 译文:35篇
    • 评论:14条
    最新评论