我創造,比如說,15級可贖回的任務,並提交他們:的Future.get()沒有返回所有的結果
List<Future<MyResult>> futures = new ArrayList<Future<MyResult>>();
List<MyResult> myResults = new ArrayList<MyResult>();
for(int i = 1; i <= 15; i++){
Callable<MyResult> task = new MyProcessor(//parameters);
Future<MyResult> future = executorService.submit(task);
futures.add(future);//used to iterate over to call get() to collect results in next for loop
}
然後我收集了15 MyResult對象:
for(Future<MyResult> future : futures){
try {
MyResult myResult = future.get();
processorResults.add(myResult);
} catch (InterruptedException e) {
//...
} catch (ExecutionException e) {
//...
}
}
問題是:與get()方法返回所有15個MyResult對象相反,我有時會返回少於15個對象。有時12有時10有時甚至更小,有時全部15.
我的印象是,get()
方法是一個阻塞調用,並會等待所有15個線程取回各自的結果,但看起來像我想念幾個並且繼續前進。 我做錯了什麼?我沒有收集結果/等待結果是否正確?當從任何MyProcessor任務中拋出ERROR時會發生這種情況嗎?
可能傳播異常。打印ExecutionException的堆棧跟蹤 – 2012-07-30 17:41:27
只是爲了記錄:get()阻塞:) – 2012-07-30 17:46:53