几次成功执行线程后,Java在循环中抛出ExecutionException

时间:2011-03-31 17:41:14

标签: java concurrency executorservice

我遇到了可调用线程的问题。

这是代码snipet:

ExecutorService service = Executors.newFixedThreadPool(1);  
for(int i =0; i<30;i++){  
    Future<MyClass> task = service.submit( new MyThread(parameter1, parameter2));  
    try{  
        result = task.get();  
    }  
    catch(InterruptedException ex){  
        System.out.println("Interruped!");  
    }  
    catch(ExecutionException ex){  
        System.out.println("Execution ExceptioN!");  
    }  
}  
service.shutdownNow();

上面的代码将正确执行18次,然后在第18次之后抛出ExecutionException。

我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:5)

ExecutionException文档说明:

尝试检索通过抛出异常而中止的任务的结果时抛出异常。可以使用Throwable.getCause()方法检查此异常。

所以你的任务就是抛出异常。在ExecutionException上调用getCause以查看该异常。