У меня есть реализация Runnable
, которая выполняет некоторую работу, которая может занять некоторое время, и я пытаюсь запланировать ее, используя ScheduledThreadPoolExecutor
с методом scheduleAtFixedRate
.Теперь я хочу убедиться, что завершение работы корректно, а это значит, что перед завершением задача должна быть полностью запущена.Я написал следующий код для выключения.
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