Сбор результатов из списка фьючерсов в JavaJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Сбор результатов из списка фьючерсов в Java

Сообщение Anonymous »

Я пытаюсь использовать фьючерсы для одновременных вызовов API. Код:

Код: Выделить всё

private void init() throws ExecutionException, InterruptedException {
Long start = System.currentTimeMillis();
List responses = fetchAllUsingFuture(ids, 3);
log.info(responses.toString());
Long finish = System.currentTimeMillis();
log.info(MessageFormat.format("Process duration: {0} in ms", finish-start));
}

private List fetchAllUsingFuture(List ids, int threadCount) throws ExecutionException, InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(threadCount);
List chunks = Utils.splitToChunks(ids, threadCount);
List futures = new ArrayList();
chunks.forEach(chunk -> {
futures.add(wrapFetchInFuture(chunk));
});
Future resultFuture = executorService.submit(() -> {
List responses = new ArrayList();
futures.forEach(future -> {
try {
responses.addAll(future.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
});
return responses;
});

executorService.shutdown();
return resultFuture.get();
}

private Future wrapFetchInFuture(List ids) {
return new FutureTask(() -> {
List responses = new ArrayList();
ids.forEach(id -> {
responses.add(fetchData(id));
});
return responses;
});
}

private ApiResponse fetchData(String id) {
ResponseEntity response = restTemplate.getForEntity(id, ApiResponse.class);
log.info(MessageFormat.format("Fetching from {0}", id));
ApiResponse body = response.getBody();
log.info(MessageFormat.format("Retrieved {0}", body));
return body;
}
Оно не выполняется, приложение запускается, а затем просто ожидает выполнения. Фьючерсы не исполняются. Все советы приветствуются.
P.S. Я знаю, что это гораздо проще сделать с помощью CompletableFuture, мне просто интересно, как это сделать с помощью Futures

Подробнее здесь: https://stackoverflow.com/questions/632 ... es-in-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как создать параллельное будущее Python, которое сигнализирует о завершении списка фьючерсов?
    Anonymous » » в форуме Python
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Сглаживание фьючерсов Java
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Неожиданное исключение при использовании параллельных фьючерсов
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Ошибка cctx автоматического инвестирования фьючерсов Bitget
    Anonymous » » в форуме Python
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Объедините два списка, используя сбор
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»