CompletableFuture 和垃圾回收

CompletableFuture and Garbage Collection

我想触发许多一次性的异步 CompletableFuture,如下所示:

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

理想情况下,这些 CompletableFutures 可以在 whenComplete 完成后被垃圾回收。但是,由于我没有存储参考资料,是否存在事先收集它们的风险?

您没有明确存储引用,但 supplyAsync 在内部存储。该方法创建一个 CompletableFuture 并将任务提交给 ForkJoinPool(如果您使用的是公共池),该任务有一个返回引用。 whenComplete 返回的 CompletableFuture 依赖于第一个 CompletableFuture,因此也被引用。

一旦 ForkJoinPool 完成 Supplier 的执行,所有这些对象都可用于垃圾回收,将第一个 CompletableFuture 标记为完成,触发第二个 CompletableFuture , 并执行传递给 whenComplete.

BiConsumer

你安全了。