并发Java
- 分类
- 数据库
- 难度
- 未设置
- 来源数
- 1
- 更新时间
- 2026/03/29 15:43
答案
+ REQUIRES_NEW如果B(第二个事务)正常执行,则B中的数据在A(外部事务)提交之前已经完成提交,其他线程已经可见其修改,这就意味着可能有脏数据的产生;同时,如果接下来A的其他逻辑发生了异常,A回滚,但是B已经完成提交,不会回滚了。当然,如果A接下来的逻辑没有相关要求,那就无所谓了 + NESTED如果B(内嵌事务)正常执行,此时B中的修改并不会立即提交,而是在A(外部事务)提交时一并提交,如果A下面的逻辑中发生异常,A回滚时,B中的修改也会回滚,就可以避免上述情况的发生
相关题目(5)
元信息
审核状态: active
关联来源: 1
来源面经题(0)
这道题目前没有手动沉淀的面经题来源。
来源(1)
Java八股(框架).md
knowledge_noteQuestion 34: REQUIRES_NEW 和 NESTED 的区别是什么?
Source answer: + REQUIRES_NEW如果B(第二个事务)正常执行,则B中的数据在A(外部事务)提交之前已经完成提交,其他线程已经可见其修改,这就意味着可能有脏数据的产生;同时,如果接下来A的其他逻辑发生了异常,A回滚,但是B已经完成提交,不会回滚了。当然,如果A接下来的逻辑没有相关要求,那就无所谓了 + NESTED如果B(内嵌事务)正常执行,此时B中的修改并不会立即提交,而是在A(外部事务)提交时一并提交,如果A下面的逻辑中发生异常,A回滚时,B中的修改也会回滚,就可以避免上述情况的发生
Reviewed answer: REQUIRES_NEW 会挂起外部事务并开启新事务,内部事务可独立提交回滚;NESTED 依赖外部事务,通常基于保存点,内部提交不会真正独立提交,外部回滚时内部也会回滚。