1. 程式人生 > 其它 >java介面請求超時中斷處理方法

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(); } //***********