奶茶三兄弟d

老师,我想问下,就是2个请求同时到达一个被事务管理起来的方法中,事务的隔离级别为 读提交级别,传播行为是REQUIRED,那是不是每个请求都会开启一个新的事务? 2、我用synchronized包裹了2个sql方法,一个是查询某行数据的一个字段值,一个是更新这行数据的那个字段值, 我想下老师,就是如果第一个请求线程进来后,进入了synchronized内,先查询,后修改了一个值,然后第一个请求线程走出synchronized代码块,接着第二个请求线程进入了synchronized内,同样也是先查询,后修改那同一个值,那他先查询的值,是否是第一个请求线程更新后的值,还是说查询到的是第一个请求线程更新之前的值, 麻烦老师解答一下,谢谢

2019-09-17
3
0
回复 3
杨开振 回复 奶茶三兄弟d

首先这里你犯了概念不清的问题。synchronized是Java的概念,而隔离级别是数据库的概念,两者不属于同一个概念,其他的语言可以是可以使用隔离级别。而一般企业不会用synchronized去控制数据库的操作,这样是线程锁的概念,比较复杂,性能又差。 1、如果不考虑事务嵌套(传播行为)的问题,请求到业务层标注@Transactional时,会启用事务,如果你使用Required,按你的说法是会为每一个请求分配独立的事务的; 2、不知道你的synchronized的锁情况,只是企业不会这样控制,更多的是使用数据库隔离级别是控制执行顺序避免出错,或者使用乐观锁,只是乐观锁,比较复杂,这里谈不清可以参考网上的资料。

2019-10-17
奶茶三兄弟d

好的,谢谢老师

2019-10-17
杀入互联网江湖 回复 杨开振

老师问个问题:在方法上只写@Transactional 其他参数一律不显示设置,那此时的传播行为和隔离级别分别是啥

2020-11-25
没有更多内容
取消 回复 发送