java原生任务超时处理

 在一般的任务处理中,可能会出现任务超时处理的情况,比如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;
        
    }

猜你喜欢

转载自blog.csdn.net/fu__chuan/article/details/88292706