2 guotaofxy guotaofxy 于 2017.01.12 11:47 提问

使程序回滚的RunTimeEx,会不会令程序终止? 1C

程序中有一段service层方法加上了注解@Transactional(propagation=Propagation.REQUIRED),程序执行时抛出RunTimeException,于是执行回滚,那么这里触发回滚的RunTimeException会令程序终止吗,还是只是单纯的回滚对数据库操作的部分?

我现在的情况是在这个注解了回滚的方法里抛了一个错,并且上层没有catch来捕获异常,但是程序还在继续跑。log里已经打印了错误了程序却没有终止,有大神有什么思路么?

2个回答

JE_GE
JE_GE   2017.01.12 12:59

没有回滚的话,应该是你的事务没有配置正确

u010528826
u010528826   2017.01.12 13:22

RunTimeException 没有进行catch的话,是由JVM来处理的,是会终止程序的。
但是如果处于多线程环境,它只是终止当前发生异常的线程,而不是全部终止。

public static void main(String[] args) throws Exception {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(2 / 0);
                System.out.println("child end");
            }
        }).start();
        // 保证子线程先执行完
        Thread.sleep(1);
        System.out.println("main end");
    }

上面的代码中,子线程 出现 java.lang.ArithmeticException,主线程仍然输出 main end。
如果注释掉2/0,则子线程输出 child end ,主线程输出 main end。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!