Выполнять разные этапы CompletableFuture на разных ExecutorService.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Выполнять разные этапы CompletableFuture на разных ExecutorService.

Сообщение Anonymous »

Чего я пытаюсь достичь:
Я хочу создать CompletableFuture, который работает в ExecutorService, а затем добавить к нему этап, который выполняется в другом ExecutorService.
Что я пробовал:

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

try (ExecutorService benchRunner = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() - 1);
ExecutorService resultHandler = Executors.newVirtualThreadPerTaskExecutor()) {
for (Algorithm algorithm : Algorithm.values()) {
for (Distribution distribution : Distribution.values()) {
for (Integer arraySize : List.of(30, 60, 90, 300, 600, 900, 3000, 6000, 9000)) {
SortingBenchmark.Config config = new SortingBenchmark.Config(arraySize, algorithm, distribution);

CompletableFuture benchmarkTask = new CompletableFuture();
benchmarkTask.completeAsync(new SortingBenchmark(config), benchRunner);
benchmarkTask.whenCompleteAsync((b, t) -> {
if (t != null) {
System.err.println("Failed on: " + config);
return;
}

System.out.println("Finished: " + config);
}, resultHandler);
}
}
}
}
Насколько я понимаю, WhenCompleteAsync должен выполняться на resultHandler после того, как новый SortingBenchmark(config) выполняется на BenchRunner. Однако когда я запускаю это, код в разделе WhenCompleteAsync никогда не запускается; однако раздел CompleteAsync работает нормально (я могу это сказать, потому что 7 моих ядер закреплены на 100% использовании, и я вижу вывод stdout).
Если я добавлю соединение< /code> вызов тестовой задачи, код в WhenCompleteAsync начинает выполняться, но это «решение» в конечном итоге (естественно) приводит к тому, что весь раздел становится однопоточным.
Я неправильно понимаю, как работает WhenCompleteAsync? Как мне добиться того, чего я хочу?
Спасибо,

Подробнее здесь: https://stackoverflow.com/questions/788 ... torservice
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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