Надежное завершение работы Java ExecutorService
Исполнители — это удобный способ управления и одновременного выполнения задач в приложениях Java. Однако неправильное завершение работы может привести к неожиданному поведению или проблемам с производительностью. В этом руководстве содержится подробное объяснение того, как правильно завершить работу службы ExecutorService, гарантируя, что все задачи будут завершены или отменены.
Понимание завершения работы ExecutorService
ExecutorService предлагает два основных метода завершения работы. :
Важно отметить, что завершение работы не гарантирует завершение всех задач. Задачи, которые не реагируют на прерывания или имеют длительные операции, могут оставаться активными.
Рекомендуемая процедура завершения работы
В документации Oracle предлагается следующий подход для корректного завершения работы:
void shutdownAndAwaitTermination(ExecutorService pool) {
pool.shutdown();
try {
// Wait for existing tasks to terminate
if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
pool.shutdownNow();
// Wait for tasks to respond to cancellation
if (!pool.awaitTermination(60, TimeUnit.SECONDS))
System.err.println("Pool did not terminate");
}
} catch (InterruptedException ie) {
pool.shutdownNow();
Thread.currentThread().interrupt();
}
}
Этот подход гарантирует завершение существующих задач и предотвращает отправку новых. Если процесс завершения работы занимает больше времени, чем ожидалось, вы можете заменить
if (!pool.awaitTermination(60, TimeUnit.SECONDS))
на
while (!pool.awaitTermination(60, TimeUnit.SECONDS))
чтобы продолжить ожидание завершения задачи.
Сводка методов завершения работы
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3