Future.get ()не возвращает все результаты

Я создаю, скажем, 15 вызываемых задач и отправляю их:

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) {
      //...
    }
}

. Проблема :Вместо того, чтобы вернуть ВСЕ 15 объектов MyResult из метода get (), я иногда возвращаю менее 15 объектов. Иногда 12, иногда 10, иногда даже меньше, а иногда и все 15.

У меня сложилось впечатление, что метод get()является блокирующим вызовом и будет ждать, пока ВСЕ 15 потоков вернутся с соответствующими результатами, но похоже, что я пропускаю некоторые из них и продвигаюсь вперед. Что я делаю неправильно? Я неправильно собираю результаты/жду результатов? Происходит ли это, когда ERROR возникает из любой задачи MyProcessor?

0
задан assylias 30 July 2012 в 17:43
поделиться