Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对集合调用异步操作_Java_Twitter Finagle - Fatal编程技术网

Java 对集合调用异步操作

Java 对集合调用异步操作,java,twitter-finagle,Java,Twitter Finagle,我有一组物品。我必须对这些返回未来的对象集合调用一个方法。现在我在将来使用get(),以便使操作同步。如何将其转换为异步 for(摘要:摘要){ acmResponseFuture(summary.getClassification()); 字符串分类=summary.getClassification(); //这是一个返回未来的呼叫,现在是一个同步呼叫 AcmResponse AcmResponse=acmResponseFuture(classification).get(); if(ac

我有一组物品。我必须对这些返回未来的对象集合调用一个方法。现在我在将来使用
get()
,以便使操作同步。如何将其转换为异步

for(摘要:摘要){
acmResponseFuture(summary.getClassification());
字符串分类=summary.getClassification();
//这是一个返回未来的呼叫,现在是一个同步呼叫
AcmResponse AcmResponse=acmResponseFuture(classification).get();
if(acmResponse!=null&&acmResponse.getAcmInfo()!=null){
setAcm(mapper.readValue(acmResponse.getAcmInfo().getAcm(),Object.class));
}
summary.setDataType(数据类型);
概要.设置应用程序(名称);
setId(summary.getEntityId());
setApiRef(federatorConfig.getqapirefull()+summary.getEntityId());
}

在等待同步调用之前,收集所有未来的
实例如何

    Collection<Future<AcmResponse>> futures = new ArrayList<>();
    for (Summary summary : summaries) {
        acmResponseFuture(summary.getClassification()));
        String classification = summary.getClassification();
        // this is a call which return Future...
        futures.add(acmResponseFuture(classification));
    }

    for (Future<AcmResponse> future : futures) {
        // ...and which is a sync call now
        AcmResponse acmResponse = future.get();
        if (acmResponse != null && acmResponse.getAcmInfo() != null) {
            summary.setAcm(mapper.readValue(acmResponse.getAcmInfo().getAcm(), Object.class));

        }
        summary.setDataType(DATA_TYPE);
        summary.setApplication(NAME);
        summary.setId(summary.getEntityId());
        summary.setApiRef(federatorConfig.getqApiRefUrl() + summary.getEntityId());
    }
Collection futures=new ArrayList();
用于(摘要:摘要){
acmResponseFuture(summary.getClassification());
字符串分类=summary.getClassification();
//这是一个返回未来的电话。。。
添加(acmResponseFuture(分类));
}
for(未来:未来){
//…现在哪个是同步呼叫
AcmResponse AcmResponse=future.get();
if(acmResponse!=null&&acmResponse.getAcmInfo()!=null){
setAcm(mapper.readValue(acmResponse.getAcmInfo().getAcm(),Object.class));
}
summary.setDataType(数据类型);
概要.设置应用程序(名称);
setId(summary.getEntityId());
setApiRef(federatorConfig.getqapirefull()+summary.getEntityId());
}

显然,你必须整理更新摘要;但你的想法是,在打电话给他们之前,你需要一次完成所有的未来。将未来和总结放在地图中…

为什么它是未来?它是一个外部API,我们无法控制它。通常我们只需要向它传递一条记录,但在这种情况下,我们可以传递一个集合,这与原始代码有何不同?我需要避免在将来使用一些异步功能,因为
acmResponseFuture(classification)
正在启动异步工作
Future.get()
只是在等待工作完成。