繁体   English   中英

我在 CompletableFuture 上做错的事情没有并行执行

[英]What I'm doing wrong with CompletableFuture that aren't executing in parallel

我将一个列表分成了 5 个部分,我想使用 restTemplate 并行执行,我有以下方法:

@Async
private CompletableFuture<List<Cidade>> MontarCidadesPorEstado(List<Cidade> listaCidades, List<UF> estado) {

    estado.forEach(es -> {
            Map<String, String> param = new HashMap<String, String>();
            param.put("UF", es.getSigla());

            Cidade[] cidades = restTemplate.getForObject(url, Cidade[].class, param);

            listaCidades.addAll(Arrays.asList(cidades));
     });

    return CompletableFuture.completedFuture(listaCidades);
}

因此创建了一个CompletableFuture列表以并行执行所有这些,但是当将每个CompletableFuture添加到列表中时,它已经在执行它而不使其并行,例如:

     List<List<UF>> subSets = Lists.partition(estados, 5);
     List<CompletableFuture<List<Cidade>>> lstCompletableFuture = new ArrayList();

     subSets.forEach(estado -> {
         lstCompletableFuture.add(MontarCidadesPorEstado(listaCidades, estado));
     });

     CompletableFuture.allOf(lstCompletableFuture.toArray(new CompletableFuture[lstCompletableFuture.size()]));

我做错了什么,我认为当我调用CompletableFuture.allOf时它应该执行方法 MontarCidadesPorEstado 。

我假设 MontarCidadesPorEstado 是一个本地方法调用。

因此调用是本地的,它不是通过代理 go 并且不是异步的。

您已经在另一个 bean 中定义了 MontarCidadesPorEstado 方法,然后调用这个 bean。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM