Java 如何使用CompletableFuture打开并将列表中的所有结果收集到线程中?
我有一个字符串列表,对于每一个字符串,我都需要打开一个新线程,并将所有信息收集到一个完整的未来 这是我的迭代:Java 如何使用CompletableFuture打开并将列表中的所有结果收集到线程中?,java,multithreading,asynchronous,completable-future,Java,Multithreading,Asynchronous,Completable Future,我有一个字符串列表,对于每一个字符串,我都需要打开一个新线程,并将所有信息收集到一个完整的未来 这是我的迭代: for (String result: results) { candidateInfos.add(getCandidatesInfo(result)); } 我第一次尝试线程的实现,希望能得到一些帮助。您可以为每个方法调用构建流,然后将结果收集到一个列表中,如下所示 Stream.Builder<Supplier<CanditateInfo>> st
for (String result: results) {
candidateInfos.add(getCandidatesInfo(result));
}
我第一次尝试线程的实现,希望能得到一些帮助。您可以为每个方法调用构建流,然后将结果收集到一个列表中,如下所示
Stream.Builder<Supplier<CanditateInfo>> streamBuilder = Stream.builder();
results.forEach(string-> streamBuilder.accept(() -> this.getCandidatesInfo(string)));
List<CanditateInfo> candidateInfos = streamBuilder.build().map(supplier -> CompletableFuture.supplyAsync(supplier, Executors.newFixedThreadPool(
results.size()))).collect(Collectors.toList()).stream().map(
CompletableFuture::join).collect(Collectors.toList());
Stream.Builder streamBuilder=Stream.Builder();
results.forEach(string->streamBuilder.accept(()->this.getCandidatesInfo(string));
列出CandidateInfo=streamBuilder.build().map(供应商->CompletableFuture.SupplySync(供应商,执行者.newFixedThreadPool(
results.size())).collect(Collectors.toList()).stream().map(
CompletableFuture::join).collect(Collectors.toList());
这里我使用了单独的执行器,因为默认情况下,java使用公共的Fork和Join池,如果池被填满,它将阻塞所有其他线程。有关更多信息,请参见A是获得帮助的良好开端