场景描述:一个程序如果超过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";
}
}
}