可调用和Future返回异常



我有以下代码:

Future<Integer> future = Executor.execute(callable);
            Integer i;
            try {
                i = future.get();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return MESSAGE_INT_CODE;
            } catch (ExecutionException e) {
                 // TODO Auto-generated catch block
                 //e.printStackTrace();
            }
            return i;

,其中ExecutionException可以包含其他异常,例如ABCException。我的调用代码正在捕获ABCException,这是运行时异常,所以如果发生ExecutionException,我怎么知道这是因为ABCException ?ExecutionException由于一些异常,当我的public call()方法运行。和调用方法可能有一些ABCException

我应该这样写吗?

 catch (ExecutionException e) {
                     throw new ABCException(e.getMessage());
                     // TODO Auto-generated catch block
                     //e.printStackTrace();
                }

try e.getCause() instanceof ABCException

如果在call()方法执行期间发生异常,ExecutorService捕获它并将其放入ExecutionException中。当你调用future.get();future抛出ExecutionException,其中包含来自调用方法的异常。如果我理解正确的话,你的代码可能是这样的:

try {
        future.get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        Throwable cause = e.getCause();
        if(cause instanceof ABCException) {
            // cast throwable to ABCException and rethrow it
            throw (ABCxception) cause;
        }else {
            // do something else
        }
    }

相关内容

  • 没有找到相关文章

最新更新