如何处理java.util.concurrent.ExecutionException异常?

时间:2012-07-25 18:25:58

标签: java error-handling executionexception

我的代码的某些部分是抛出java.util.concurrent.ExecutionException异常。 我怎么处理这个?我可以使用throws条款吗?我对java有点新鲜。

3 个答案:

答案 0 :(得分:11)

这取决于你Future如何处理它的关键任务。事实是你不应该得到一个。如果您的Future中执行的代码未执行某些操作,则您只会遇到此异常。

当您catch(ExecutionException e)时,您应该能够使用e.getCause()来确定Future中发生的事情。

理想情况下,您的例外不会像这样冒泡到表面,而是直接在Future处理。

答案 1 :(得分:2)

您应该调查并处理ExecutionException的原因。

“Java并发操作”一书中描述的一种可能性是创建launderThrowable方法来处理解包通用ExecutionExceptions

void launderThrowable ( final Throwable ex )
{
    if ( ex instanceof ExecutionException )
    {
        Throwable cause = ex.getCause( );

        if ( cause instanceof RuntimeException )
        {
            // Do not handle RuntimeExceptions
            throw cause;
        }

        if ( cause instanceof MyException )
        {
            // Intelligent handling of MyException
        }

        ...
    }

    ...
}

答案 2 :(得分:2)

如果您正在寻找处理异常,事情就非常简单。

   public void exceptionFix1() {
       try {
           //code that throws the exception
       } catch (ExecutionException e) {
           //what to do when it throws the exception
       }
   }

   public void exceptionFix2() throws ExecutionException {
       //code that throws the exception
   }

请记住,第二个示例必须包含在执行层次结构中的try-catch块中。

如果您要修复此异常,我们必须查看更多代码。