[英]Facing issue while using invokeAll to fetch Future object in ExecutorService
使用invokeAll方法获取Future object 时遇到以下错误。 我正在尝试实现ExecutorService以并行调用。
错误>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>java.util.concurrent。执行异常:java.lang.UnsupportedOperationException
代码片段
总机 Class:
ExecutorService exService = Executors.newFixedThreadPool(1);
List<CallableTask> listOfTask = new ArrayList<CallableTask>();
Map<String, String> param1= params;
param1.put("catCode", "XX278293##X");
listOfTask.add(new CallableTask(param1));
List<Future<Map<String,String>>> resultSet = exService.invokeAll(listOfTask);
for(Future<Map<String,String>> result : resultSet){
if(result.isDone()){
Map<String,String> response = result.get(); <<----------Facing Error in this line
}
}
exService.shutdown();
Class 可调用任务:
import java.util.Collections;
import java.util.Map;
import java.util.concurrent.Callable;
class CallableTask implements Callable<Map<String, String>>{
private String name;
private Map<String, String> params;
public CallableTask(Map<String, String> params){
this.name=params.get("catCode");
this.params =params;
}
@Override
public Map<String, String> call() throws Exception {
boolean data = false;
//REST CALL
Map<String, String> resultData = Collections.emptyMap();
resultData.put("result", name+data);
//Getting response upto here
return resultData;
}
}
先感谢您!!!
事实上异常发生在这里:你不能调用emptymap#put
:
Map<String, String> resultData = Collections.emptyMap();
resultData.put("result", name+data);
Future#get
只是报告在执行CallableTask
期间发生的异常:
FutureTask#report:
private V report(int s) throws ExecutionException {
Object x = outcome; --Here: outcome is "java.lang.UnsupportedOperationException".
if (s == NORMAL)
return (V)x;
if (s >= CANCELLED)
throw new CancellationException();
throw new ExecutionException((Throwable)x); --Status of this task is "EXCEPTIONAL"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.