Как убедиться, что все потоки остановлены с shutdownNow ()? - PullRequest
0 голосов
/ 20 сентября 2018

Я использую Java ExecutorService для одновременного запуска некоторых задач.Я столкнулся с ситуацией, когда у меня несколько потоков, обновляющих мою БД, и если какой-либо из них выдает исключение, я хочу остановить выполнение всех запущенных потоков и откатить БД.

Я могу сделать это с shutdownNow ().Но в документах есть предостережение:

Этот метод не ожидает активного завершения задач для завершения.Для этого используйте awaitTermination.

Простой метод ol shutdown() имеет то же самое предостережение.И я читал, что предпочтительный способ использования shutdown() - это ждать завершения и вызывать shutdownNow(), если время ожидания истекло, например:

executorService.shutdown();
try {
    executorService.awaitTermination(1000, TimeUnit.MILLISECONDS);
} catch (InterruptedException e1) {
    executorService.shutdownNow();
}

Так что мне делать, если shutdownNow()не прекращает все сразу?Каков наилучший способ убедиться, что все потоки прекратили выполнение перед откатом БД?

1 Ответ

0 голосов
/ 20 сентября 2018

что мне делать, если shutdownNow () не завершает все сразу?

Подать отчет об ошибке.Затем исправьте свой код так, чтобы вызов awaitTermination() никогда не прерывался.Либо так, либо найди способ перенести то, что эти задачи выполняют, в отдельный процесс, который ты можешь безопасно убить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...