ExecutorService+FutureTask实现程序执行超时监控

本文介绍如何使用Java中的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";
  }
 }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值