CompletableFuture и Сборка мусора - PullRequest
0 голосов
/ 15 февраля 2019

Я бы хотел запустить множество одноразовых асинхронных CompletableFutures, например так:

for (Job job : jobs) {
 CompletableFuture.supplyAsync(() -> job.process())
   .whenComplete(this::doSomething);
}

В идеале эти CompletableFutures могут собираться после сборки whenComplete.Но есть ли риск, что они собраны заранее, так как я не храню ссылку?

1 Ответ

0 голосов
/ 15 февраля 2019

Вы явно не храните ссылку, но supplyAsync это внутренне.Метод создает CompletableFuture и отправляет задачу в ForkJoinPool (если вы используете общий пул), на который имеется ссылка.CompletableFuture, возвращаемый whenComplete, становится зависимым от этого первого CompletableFuture и, следовательно, также ссылается на него.

Все эти объекты будут доступны для сборки мусора, когда ForkJoinPool завершит выполнение Supplier, отмечает первый CompletableFuture как завершенный, запускает второй CompletableFuture и выполняет BiConsumer, переданный whenComplete.

Вы в безопасности.

...