我有一個Runnable
實現,它可能需要一些時間,我試圖使用ScheduledThreadPoolExecutor
和scheduleAtFixedRate
方法來安排它。現在我想確保關閉是優雅的,意味着,在終止之前,任務應該被允許完全運行。我已經寫下關閉代碼。等待任務完成,然後終止ScheduledThreadPoolExecutor
public void shutDown() throws Exception {
try {
LOG.info("Gracefully shutting down executor");
executor.shutdown();
if (!executor.awaitTermination(SHUTDOWN_TIMEOUT, TimeUnit.SECONDS)) {
// cancels currently executing tasks.
LOG.info("Executor is still alive. Forcing executor thread pool to shut down");
executor.shutdownNow();
// Wait a while for tasks to respond to being cancelled
if (!executor.awaitTermination(SHUTDOWN_TIMEOUT, TimeUnit.SECONDS)) {
LOG.fatal("Executor thread pool did not terminate");
throw new Exception("Unable to shut down executor thread pool forcefully");
}
LOG.info("Executor shut down.");
}
} catch (Exception e) {
LOG.error("Exception shutting down executor", e);
throw e;
}
}
但問題是這樣的,我必須指定時間來等待明確的,我無法預測的任務提前所用的時間。有沒有辦法讓執行者無限期地等待,直到執行任務完成而不必提及時間等待?還是有更好的方法來處理上述情況?
感謝
Jitendra
shutdown()應該做適當的終止權嗎?根據文檔,shutdown()啓動有序關閉,在其中執行先前提交的任務,但不會接受任何新任務。任何你有其他代碼與awaitTermination(...)相關的原因;如果在一定的時間間隔內沒有完成,您是否要強制關閉? – kosa 2012-02-01 22:24:20
我認爲,它只啓動關閉並退出,不會阻塞或等待線程關閉。 – RandomQuestion 2012-02-01 22:27:57
我想要某種阻塞呼叫,以便我確切知道何時終止任務 – RandomQuestion 2012-02-01 22:32:49