2011-03-31 67 views
0

我在调用线程时遇到问题。Java在多次成功执行线程后在循环中抛出ExecutionException

这里是一小段代码片段:

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。

我在做什么错?

谢谢!

+2

发布堆栈跟踪请 – katsharp 2011-03-31 17:42:01

+0

发布'MyThread'的代码 – pajton 2011-03-31 17:45:49

+0

只是为了确保:'MyThread'实现'Callable'并且与'Thread'没有关系(不扩展)? – 2011-04-05 23:54:47

回答

5

ExecutionException当文档指出:试图检索中止通过抛出异常的任务的结果时

抛出异常。这个异常可以使用Throwable.getCause()方法进行检查。

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