如果在service层的方法上同时使用事务和锁无法保证同步
例如:
@Service
public class Demo{
@Transactional
public void synchronized update() {
............
}
}
上面这个例子是无法保证数据的一致性
由于spring的aop,会在update方法之前开启事务,之后再加锁,当锁住的代码执行完成后,在提交事务,
因此synchronized代码块执行是在事务之内执行的,可以推断在代码块执行完时,事务还未提交,其他线程进入synchronized代码块后,读取的库存数据不是最新的。
解决上面的方法,可以在update方法之前加上synchronized,在还没有开事务之间就加锁,那么就可以保证线程同步