我做了一个函数,称为allOfSequentialSupplierCombine(...)
这个函数,它基本上接受一个linkedList
承诺的供应商,然后它通过递归链接它们一个一个地执行承诺,然后它构建一个结果数组。
我一直在调试代码,我使用 Jprofiler 来分析内存并且没有任何异常,我一直在阅读有关如何在内存中处理承诺以及线程池如何工作的信息
private static <T> CompletionStage<List<T>> allOfSequentialSupplierCombine(LinkedList<Supplier<CompletionStage<T>>> chain) {
if (chain != null && !chain.isEmpty()) {
Supplier<CompletionStage<T>> future = chain.pop();
return future.get().thenCompose(r -> {
return allOfSequentialSupplierCombine(chain).thenApply(list -> {
List<T> result = list;
if (list == null) {
list = new ArrayList<>();
}
list.add(0, r);
return list;
});
});
}
return CompletableFuture.completedFuture(null);
}
我面临的问题是,如果我输入超过 2000 个供应商,该功能就会停止而没有任何错误。我期待它可能会在内存中创建太多线程,导致链被破坏。
任何人都可以帮助我了解链式承诺是如何存储在内存中的,jvm 是否创建了与承诺一样多的线程?