java - CompletableFuture 和垃圾收集
问题描述
我想触发许多一次性异步 CompletableFutures,如下所示:
for (Job job : jobs) {
CompletableFuture.supplyAsync(() -> job.process())
.whenComplete(this::doSomething);
}
理想情况下,这些 CompletableFuture 可以在whenComplete
完成后进行垃圾收集。但是由于我没有存储参考,因此是否存在预先收集它们的风险?
解决方案
您没有显式存储引用,而是supplyAsync
在内部存储。该方法创建 aCompletableFuture
并将任务提交给ForkJoinPool
(如果您使用的是公共池),该任务具有对它的引用。CompletableFuture
返回的 by成为whenComplete
依赖于第一个CompletableFuture
,因此也被引用。
ForkJoinPool
一旦完成执行,所有这些对象都将可用于垃圾回收Supplier
,将第一个标记CompletableFuture
为完成,触发第二个CompletableFuture
,并执行BiConsumer
传递给whenComplete
。
你安全了。
推荐阅读
- c++ - 可变参数模板参数的问题
- javascript - 大表的Angular 6性能问题
- sql - 如何摆脱由于 PLSQL linesize 大于每行中的数据而导致的空格?
- c# - 在不同视图中使用下拉列表中的文本值
- node.js - nodejs s3存储桶上传脚本可重用
- ruby-on-rails - Rails 记录神秘冻结,默默丢弃更新
- c# - 更新关系为映射表的子集合的 EF 友好方式
- php - 如何在 Laravel 中实现自定义频道通知
- mariadb - 在联机服务器上工作时如何使用外键
- chapel - 如何将 Chapel 字符串传递给需要(非常量)char* 的 C 函数?