Me gustaría disparar muchos de no intervención de uno asíncrono CompletableFutures, así:
for (Job job : jobs) {
CompletableFuture.supplyAsync(() -> job.process())
.whenComplete(this::doSomething);
}
Lo ideal sería que estos CompletableFutures podrían ser basura recogida después whenComplete
ha terminado. Pero, ¿existe un riesgo de que se recogen de antemano, ya que no estoy almacenar una referencia?
Usted no está almacenando una referencia explícita, pero supplyAsync
es, a nivel interno. El método crea una CompletableFuture
y presenta una tarea a la ForkJoinPool
(si va a utilizar la piscina común) que tiene una parte posterior referencia a él. El CompletableFuture
devueltos por whenComplete
convierte en dependiente en la que la primera CompletableFuture
y así también se hace referencia.
Todos estos objetos estarán disponibles para la recolección de basura una vez que la ForkJoinPool
ejecución de la ultima Supplier
, es la primera CompletableFuture
tan completa, desencadena la segunda CompletableFuture
, y ejecuta la BiConsumer
pasó a whenComplete
.
Estás seguro.