Java 使用不同的输入并行执行相同的方法';s使用Future和@Async

Java 使用不同的输入并行执行相同的方法';s使用Future和@Async,java,spring,asynchronous,futuretask,Java,Spring,Asynchronous,Futuretask,我有一个java方法,需要与不同的输入集(来自列表)并行执行。基本上,我的业务逻辑方法有一些外部调用逻辑,只需花费很少的响应时间。为了减少获得最终响应的总时间,我尝试使用Future和@Async实现并行调用此方法。下面是我的示例代码: 控制器类: List<Future<ResponseObj>> futuresResObj = new ArrayList<Future<ResponseObj>>(); Future<ResponseObj

我有一个java方法,需要与不同的输入集(来自列表)并行执行。基本上,我的业务逻辑方法有一些外部调用逻辑,只需花费很少的响应时间。为了减少获得最终响应的总时间,我尝试使用Future和@Async实现并行调用此方法。下面是我的示例代码:

控制器类:

List<Future<ResponseObj>> futuresResObj = new ArrayList<Future<ResponseObj>>();
Future<ResponseObj> report = null;
for(int i=0 ; i<idList.size() ; i++){
        request.setId(idList.get(i));
        System.out.println("i Value::::"+i);
        report = parallelService.executeBusinessMethod(request,i);
        futuresResObj.add(report);
}

System.out.println("futuresResObj list Size ::::"+futuresResObj.size());
for(Future<ResponseObj> future: futuresResObj) {
        System.out.println(future.get().getResObj()); // concurrent access excpetion throws here.
}
List futuresResObj=new ArrayList();
未来报告=空;

对于(int i=0;i,当执行在阻塞循环中等待所有线程完成时,可能有其他线程正在向您的
futuresobj
列表添加更多的未来,请尝试添加一些日志语句,也尝试在
System.out.println
之外等待类似的未来

System.out.println("futuresResObj list Size::::"+futuresResObj.size());
for(Future<ResponseObj> future: futuresResObj) {
    future.get();
 }
System.out.println(“futuresResObj列表大小:::”+futuresobj.Size());
未来(未来:未来){
future.get();
}

您还可以使用
future.isDone()
方法进行测试,以了解这些线程的行为。

请在此处列出您的并发访问异常?
System.out.println("futuresResObj list Size::::"+futuresResObj.size());
for(Future<ResponseObj> future: futuresResObj) {
    future.get();
 }