CompletableFuture和垃圾收集

问题描述 投票:3回答:1

我想解雇许多一次性的异步CompletableFutures,如下所示:

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

理想情况下,这些CompletableFutures可以在whenComplete完成后进行垃圾收集。但他们是否有预先收集的风险,因为我没有存储参考?

java asynchronous garbage-collection completable-future
1个回答
4
投票

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

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

你安全了。

© www.soinside.com 2019 - 2024. All rights reserved.