Задачи в ExecutorService падают, а в логах пусто
Ночной джоб рассылки перестал доходить до части клиентов. Код выглядит так:
ExecutorService pool = Executors.newFixedThreadPool(4);
for (Order order : orders) {
pool.submit(() -> notificationService.send(order));
}
pool.shutdown();
Внутри send для части заказов бросается NullPointerException. При этом в логах нет ни одной строки об ошибке, приложение работает дальше, часть уведомлений просто не уходит. Что происходит?
- Поток пула умирает вместе с задачей, пул постепенно пустеет, и оставшиеся задачи не выполняются
- Исключение уходит в UncaughtExceptionHandler потока, который по умолчанию ничего не печатает для пулов
- Исключение перехватывается и сохраняется внутри Future, который никто не читает, поэтому оно нигде не видно
- Пул автоматически повторяет упавшую задачу, и до логирования дело не доходит
