場景描述:一個程序如果超過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";
}
}
}