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

原创 2016年08月28日 22:57:50

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

例如:

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

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

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

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


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


spring事务和synchronized锁的一些问题

1 问题描述 最近有小伙伴在做商品抽奖活动时,在对奖品库存进行扣减,有线程安全的问题,遂加锁synchronized进行同步, 但发现加锁后并没有控制住库存线程安全的问题,导致库存仍被超发...
  • chentao866
  • chentao866
  • 2017年06月29日 14:10
  • 611

spring boot应用启动原理分析

spring boot quick start在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web...
  • hengyunabc
  • hengyunabc
  • 2015年11月30日 22:36
  • 125820

spring实现集群同步锁

  • 2016年08月16日 18:36
  • 14KB
  • 下载

Spring+SpringMVC 文件批量同步上传

Spring、SpringMVC、文件批量同步上传,MultipartFile[] Files,HMTL5:新属性( `multiple="multiple"`)...
  • qq724581322
  • qq724581322
  • 2016年06月29日 12:07
  • 414

Spring 实现你自己的事务同步

在《Spring Transaction 分析事务属性(事务的基本概念、配置)》基础上  将介绍如何实现你自己的事务同步,只要是活动的事务状态发生变化就会收到TransactionSyn...
  • partner4java
  • partner4java
  • 2011年11月27日 20:06
  • 15810

Spring之不同步的Bean

singleton作用域的Bean只有一次初始化的机会,它的依赖关系也只有在初始化阶段被设置,当singleton作用域的Bean依赖prototype作用域的Bean时,Spring容器会在初始化s...
  • owen_william
  • owen_william
  • 2016年02月28日 23:42
  • 475

Spring之事物的同步资源管理

现在应该清楚了如何创建不同的事物管理器,和如何链接到关联的
  • luccs624061082
  • luccs624061082
  • 2014年10月18日 18:34
  • 733

spring实现集群同步锁

  • 2016年08月16日 18:36
  • 14KB
  • 下载

springmvc+spring线程池处理http并发请求数据同步控制问题

spring配置文件添加线程池配置 bean id="taskExecutor" class="org.springframework.scheduling.concurrent...
  • Ragin
  • Ragin
  • 2017年03月31日 16:24
  • 4198

谈谈spring 事务同步 transactionSynchronization 的作用

Srping 事务管理有两个比较重要的字段,当进入切面方法的时候,会返回当前事务的状态 DefaultTransactionStatus status = newTransactionStatus(...
  • liuaixi200
  • liuaixi200
  • 2017年01月23日 17:14
  • 1788
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring @transactional 和synchronized同时使用不能同步的问题
举报原因:
原因补充:

(最多只允许输入30个字)