当前位置: 首页 > 图灵资讯 > 技术篇> Java接口调用服务太多 java调用接口超时处理

Java接口调用服务太多 java调用接口超时处理

来源:图灵教育
时间:2023-05-18 09:26:08

Java任务超时处理

有时候会有一些耗时的操作,可能会遇到加班等问题,比如IO堵塞,HTTP请求得不到响应,导致timeout的结果。 可以想出一个解决方案:不加时返回正常结果,加时返回默认结果或特殊处理结果。 JDK中有这样的解决方案。

MyTask.java

package cn.pangpython.test.utils;import java.util.Random;import java.util.concurrent.*;/** * Created by pangPython on 2017/9/21. */public class MyTask {    //设置超时间    private int timeout;    public MyTask(int timeout) {        this.timeout = timeout;    }    //处理我的任务    public String handler(){        String result = "-1";        ExecutorService executorService = Executors.newCachedThreadPool();        FutureTask<String> futureTask = new FutureTask<String>(new Callable<String>() {            @Override            public String call() throws Exception {                /**                 * 这里可以做一些耗时的操作或发送http等等,有可能导致任务超时                 *                 */                Random random = new Random();                int random_num = Math.abs(random.nextInt())%4000;                System.out.println("random_num: "+random_num);                Thread.sleep(random_num);                return Integer.toString(random_num);            }        });        //执行        executorService.execute(futureTask);        try {            //获取结果                result = futureTask.get(timeout,TimeUnit.MILLISECONDS);        } catch (InterruptedException e) {            //如果中断            System.out.println("InterruptedException");            futureTask.cancel(true);        } catch (ExecutionException e) {           // 若执行异常            System.out.println("ExecutionException");            futureTask.cancel(true);        } catch (TimeoutException t){            //如果超时            System.out.println("time out!");            result = "0";            futureTask.cancel(true);        } finally {            //关闭            executorService.shutdown();        }        return result;    }    public static void main(String[] args){        //声明并实例化自己的任务,设置超时时间为3秒        MyTask myTask = new MyTask(3000);        如果休眠时间超过3000,//循环5次,测试,每次使用的随机数量在4000范围内,将进入超时处理逻辑        String result;        for(int i = 0;i<5;i++){            System.out.println(=======第”+i+"次=======");            result = myTask.handler();            System.out.println(result);        }    }}

测试效果

Java接口调用服务太多 java调用接口超时处理_FutureTask

本文是转载内容,我们尊重原作者对文章的权利。如有内容错误或侵权行为,请联系我们更正或删除文章。