ExecutorService+FutureTask實現程序執行超時監控

 場景描述:一個程序如果超過5秒還未執行完成,希望調用別的程序實現該功能

 解決方法:用戶ExecutorService+FutureTask實現超過一定時間後,自動執行下面程序

優點:對程序的執行時間進行控制、處理

缺點:如果A程序是一個死循環,FutureTask.get(int,String)停止等待A程序的結果,自動執行下面程序,但A程序會一直執行

以下是實現代碼:

public class Test {


 public static void main(String[] args) {
  ExecutorService executor = Executors.newSingleThreadExecutor();
  FutureTask<String> futureTask =
         new FutureTask<String>(new Callable<String>() {
           public String call() {
           //真正的任務,這裏的返回值類型爲String,可以爲任意類型
            return testResult(1);
         }});
  executor.execute(futureTask);
  //在這裏可以做別的任何事情
  String result = null;
  try {
   //取得結果,同時設置超時執行時間爲0.1秒。同樣可以用future.get(),不設置執行超時時間取得結果
   result = futureTask.get(100, TimeUnit.MILLISECONDS);
   
  } catch (InterruptedException e) {
   futureTask.cancel(true);
  } catch (ExecutionException e) {
   futureTask.cancel(true);
  } catch (TimeoutException e) {
   futureTask.cancel(true);
   //超時後,進行相應處理
  } finally {
   executor.shutdown();
  }
  System.out.println("result="+result);
 }
 
 private static String testResult(int num){
  System.out.println("begin");
  if(1==num){
   while(true){
    continue;
   }
  }else{   
   return "12333";
  }
 }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章