Я использую Java ExecutorService
для одновременного запуска некоторых задач.Я столкнулся с ситуацией, когда у меня несколько потоков, обновляющих мою БД, и если какой-либо из них выдает исключение, я хочу остановить выполнение всех запущенных потоков и откатить БД.
Я могу сделать это с shutdownNow ().Но в документах есть предостережение:
Этот метод не ожидает активного завершения задач для завершения.Для этого используйте awaitTermination.
Простой метод ol shutdown()
имеет то же самое предостережение.И я читал, что предпочтительный способ использования shutdown()
- это ждать завершения и вызывать shutdownNow()
, если время ожидания истекло, например:
executorService.shutdown();
try {
executorService.awaitTermination(1000, TimeUnit.MILLISECONDS);
} catch (InterruptedException e1) {
executorService.shutdownNow();
}
Так что мне делать, если shutdownNow()
не прекращает все сразу?Каков наилучший способ убедиться, что все потоки прекратили выполнение перед откатом БД?