@Transactional(isolation=Isolation.SERIALIZABLE)
public String modifyStock(){
查询库存
thread.sleep(10*1000);
修改库存
}多线程访问这个方法的时候,线程1查询完库存后进入休眠,线程2查询完库存后进入休眠,线程1休眠结束执行修改库存,线程2休眠结束执行修改库存,线程2报获取锁失败。为什么线程2在查询库存的时候没有报获取锁失败,不是加了SERIALIZABLE锁吗?
@Transactional(isolation=Isolation.SERIALIZABLE)
public String modifyStock(){
查询库存
thread.sleep(10*1000);
修改库存
}多线程访问这个方法的时候,线程1查询完库存后进入休眠,线程2查询完库存后进入休眠,线程1休眠结束执行修改库存,线程2休眠结束执行修改库存,线程2报获取锁失败。为什么线程2在查询库存的时候没有报获取锁失败,不是加了SERIALIZABLE锁吗?
15 回答8.4k 阅读
8 回答6.2k 阅读
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
我感觉应该是查询的时候 没有锁,而是在事务提交的时候才体现 排队提交事务的逻辑