在一般的任务处理中,可能会出现任务超时处理的情况,比如http请求响应迟缓,io阻塞的等 ,那样就出现了超时的结果,jdk中已经给出了方案。
private String sendAndRecInTime(final HashMap<String, String> sendMap, final HashMap<String, String> resMap,final HashMap<String,String> sysEnv){
ExecutorService executorService = Executors.newSingleThreadExecutor();
String result = "1";
FutureTask<String> futureTask = new FutureTask<>(new Callable<String>() {
@Override
public String call() throws Exception {
if(sendAndRecToCloudReal(sendMap, resMap, sysEnv)){
logger.info("返回报文为:"+resMap);
return "0";
}else{
return "1";
}
}
});
executorService.execute(futureTask);
try {
//设置超时处理时间 10s
result = futureTask.get(10000, TimeUnit.MILLISECONDS);
} catch (InterruptedException | ExecutionException | TimeoutException e) {
//e.printStackTrace();
//超时用异常捕获,返回执行超时
futureTask.cancel(true);
result = "1";
}
executorService.shutdown();
return result;
}