java接口請求超時中斷處理方法


//*********
         // 成員內部類
        class CallableThread implements Callable<String> {
            @Override
            public String Back() {
            //Back()這個就是執行的業務方法
                try {
                    // 假設這個是一個耗時的網絡 請求
                  Thread.currentThread().sleep(5000);
                  return "執行成功!";
                } catch (Exception e) {
                    e.printStackTrace();
                    return "執行異常!";
                }
            }
        }
        Callable<String> callableThread=new CallableThread();
        FutureTask<String> 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<String> call = new Callable<String>(){
            public String call() throws Exception{
                //耗時請求
                Thread.currentThread().sleep(5000);
                return "OK";
            }
        };
        // Future是一個接口,該接口用來返回異步的結果
        Future<String> future = exec.submit(call);
        try{
            // 同步結果,並且設置超時時間
            String S = future.get(1000 * 6, TimeUnit.MILLISECONDS);
            System.out.println(S);
            //這里返回結果
            return S;
        }catch(InterruptedException e){
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
        //如果在此拋出異常,說明接口超時
            e.printStackTrace();
        }
        //執行結束后,手動關閉線程池
        exec.shutdown();
    }
        //***********

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM