zoukankan      html  css  js  c++  java
  • java接口请求超时处理方法

    //*********
             // 成员内部类
            class CallableThread implements Callable<Result> {
                @Override
                public Result call() {
                    try {
                        // 假设这个是一个耗时的网络 请求
                      Result r = HBaseUtil.getRow("grid_data", Bytes.toBytes(row_key));
                        return r;
                    } catch (Exception e) {
                        // 假装记录一下日志
                        e.printStackTrace();
                        return null;
                    }
                }
            }
            Callable<Result> callableThread=new CallableThread();
            FutureTask<Result> task= new FutureTask<>(callableThread);
            // 开启线程
            new Thread(task).start();
            Result r;
            try {
                // 如果3秒没有返回值就 抛出异常
                r = task.get(3000, TimeUnit.MILLISECONDS);
            } catch (Exception e) {
                r=null;
            }
            // 结束事件
            //***********
    
    
    
    方式二:
            //*********
            final ExecutorService exec = Executors.newSingleThreadExecutor();
            Callable<Result>  call = new Callable<Result>(){
                public Result call() throws Exception{
                    //这个是一个耗时的网络 请求
                    Result r = HBaseUtil.getRow("grid_data", Bytes.toBytes(row_key));
                    return r;
                }
            };
            // Future是一个接口,该接口用来返回异步的结果
            Future<Result> future = exec.submit(call);
            Result r = null;
            try{
                // 同步结果,并且设置超时时间   
                r = future.get(1000 * 1,TimeUnit.MILLISECONDS);
            }catch(InterruptedException e){
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            } catch (TimeoutException e) {
                e.printStackTrace();
            }
            //执行结束后,手动关闭线程池
            exec.shutdown();
    
            //***********
  • 相关阅读:
    Django drf 功能组件
    Django drf 视图家族
    Django drf初级
    Django drf序列化器 Serializer
    VUE 全整理
    Django Xadmin的安装方式
    python virtualenv虚拟环境搭建
    版本控制器:操作流程
    版本控制器:GIT线上操作
    《剑指offer》---跳台阶问题
  • 原文地址:https://www.cnblogs.com/KdeS/p/12033472.html
Copyright © 2011-2022 走看看