多线程 调用 Es Http接口

img


现在用的是submit 有些问题 最后 返回不了数据 请问还有没有别的方式

1.contentList应该用Collections.synchronizedList(contentList)修饰
2.另外线程外部应该等待多线程执行完,再读取contentList 可以考虑用countdownlatch类

pool_executor是用的哪个实现类

submit之后是会返回一个Future对象的,调用它的get方法就可以获得返回值,我们项目就是这样用的

img

jdk8版本,可以使用CompletableFuture.supplyAsync。
伪代码:

        List<T> completableFutures = new ArrayList<>();
        /**
         * 多线程查询
         */
        for () {
            CompletableFuture<T> t = CompletableFuture.supplyAsync(() -> {
                
                return tt;
            }).exceptionally(e->{
                e.printStackTrace();
                return null;
            });
            completableFutures.add(t);
        }
        CompletableFuture[] completableFutures1 = new CompletableFuture[completableFutures.size()];
        CompletableFuture<Void> voidCompletableFuture = CompletableFuture.allOf(completableFutures.toArray(completableFutures1));
        voidCompletableFuture.join();
        completableFutures.stream().forEach(s->{
            try {
                result.add(s.get());
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
        });