Мне нужно правильно закрыть два экземпляра службы-исполнителя одним способом.Завершение работы двух экземпляров ExecutorService
Вот мой упрощенный код:
ExecutorService executor1 = Executors.newSingleThreadExecutor();
ScheduledExecutorService executor2 = Executors.newSingleThreadScheduledExecutor();
// logic here
executor1.shutdown();
executor2.shutdown();
try {
if (!executor1.awaitTermination(1, TimeUnit.SECONDS)) {
executor1.shutdownNow();
}
} catch (InterruptedException ex) {
throw new IllegalStateException(ex);
}
try {
if (!executor2.awaitTermination(1, TimeUnit.SECONDS)) {
executor2.shutdownNow();
}
} catch (InterruptedException ex) {
throw new IllegalStateException(ex);
}
InterruptedException
преобразуется в IllegalStateException
как я не ожидаю каких-либо перерывов здесь, и это означало бы мое приложение вошел в незаконное состояние.
Я вижу один недостаток в этом решении - всякий раз, когда первый исполнитель при отключении исключает исключение, второй исполнитель не будет правильно закрыт. Каким должен быть правильный подход? Как безопасно закрыть два экземпляра ExecutorService
?
Я бы предпочел избежать вложенных блоков try-finally
, так как мне, возможно, потребуется добавить третий сервис-исполнителя, и код станет неуправляемым.
Является ли это таким же, как: http://stackoverflow.com/questions/25330464/running-multiple-thread-pools-executorservice-together? –
@YacoZaragoza не очень - здесь мой пример кода упрощен, но мне нужны два отдельных сервиса-исполнителя, так как один из них нормальный, а второй - служба-исполнитель. –
Получил это. Позвольте мне запустить какой-то тест :-) –