Сбой при вызове shutdown()
для исполнителя потока приведет к тому, что приложение никогда не завершится.
Лучшая практика для закрытия ExecutorService заключается в следующем:
ExecutorService service = null;
try {
service = Executors.newSingleThreadExecutor();
// add tasks to thread executor
…
} finally {
if (service != null) service.shutdown();
}
Поскольку Java знает концепцию "попробуй с ресурсами", было бы неплохо, если бы мы могли это сделать?
try (service = Executors.newSingleThreadExecutor())
{
// add tasks to thread executor
…
}