Java线程无声地崩溃 - 我无法捕获异常

时间:2014-05-07 09:09:49

标签: java multithreading exception executorservice executors

我看到一种行为,我无法解释

我有一个Runnable,它的代码是:

run()
{
    print("start");
    try{
        doSomething();
        print("end");    

    }catch (Exception e){
        print("problem");
    }
    print("method end");

}

这种行为很奇怪,因为我得到的 only 打印是“开始” - 我希望得到“问题”和“方法结束”打印。如果doSomething本身处理异常 - 那么将打印“end”。 但除了“开始”

,我没有得到任何印刷品

现在我知道doSomething方法存在一些问题,好像我不通过执行程序服务运行它,我得到“找不到方法”异常。

我认为它可能以某种方式连接到我使用的Executor服务 - Executors.newFixedThreadPool,但我无法解释它

感谢您的建议!

2 个答案:

答案 0 :(得分:8)

NoSuchMethodError不是来自Exception

java.lang.Object
    java.lang.Throwable
        java.lang.Error
            java.lang.LinkageError
                java.lang.IncompatibleClassChangeError
                    java.lang.NoSuchMethodError

因此不会被发布的catch子句捕获。更改为捕获Throwable或为catch添加单独的Error子句并以不同方式处理(尝试从Exception恢复但报告Error并且不要尝试以恢复为例)。

答案 1 :(得分:4)

当然会抛出Error。请尝试捕捉Throwable

编辑:的确,java.lang.NoSuchMethodErrorError