Java實現限定方法執行時間-java 1.5以上的Future類可以執行超時處理
阿新 • • 發佈:2019-02-04
- 開發場景中有是需要對響應時間較長的介面或者方法進行處理,比如跳過繼續執行,或者其它的方式,這個可以使用Future實現:
- 程式碼
// 設定BI返回資料最長時間,如果超過此時間則跳過
Callable<String> call = new Callable<String>() {
public String call() throws Exception {
// 開始執行耗時操作
// Thread.sleep(1000 * 5);
// return "執行緒執行完成.";
// 響應時間較長的方法或介面呼叫,返回String型別
return getRecCourses(params);
}
};
try {
ExecutorService exec = Executors.newFixedThreadPool(1);
Future<String> future = exec.submit(call);
// csvData為call方法裡的返回值,也就是我們方法的返回值
csvData = future.get(1000 * 1, TimeUnit.MILLISECONDS); // 任務處理超時時間設為 1 秒
} catch (TimeoutException ex) {
// 捕獲超時異常,超時處理,可以通過ex丟擲異常,如果不丟擲,則控制檯不輸出異常。
csvData = null;
LogUtil.warn(Module.COURSE, getClass(), "getCourseRecFromBI", "請求Bi推薦課程資料超時,使用原來推薦系統"ex);
} catch (Exception e) {
csvData = null;
LogUtil.warn(Module.COURSE, getClass(), "getCourseRecFromBI", "請求Bi推薦課程資料失敗,使用原來推薦系統");
}