Когда должна происходить очистка приложения
Я просто читал, что мы можем использовать перехватчики завершения работы в качестве примера того времени, когда было бы идеально предоставить функции для clean up
до выхода из приложения.
Мне было интересно, если, например, у вас есть приложение, которое должно работать 24 часа в сутки, как веб-сервис, когда было бы идеальным временем для завершения и очистки таких вещей, как Executor Services и так далее. Если приложение не должно быть выключено, то действительно ли у нас нет удобного периода очистки или действительно возможности чистого выключения?
Спасибо
1 ответ
Вопрос слишком широкий, но если я правильно понял, документы Oracle объяснят это:
Пул, на который больше нет ссылок в программе И нет оставшихся потоков, будет автоматически отключен. Если вы хотите, чтобы неиспользуемые пулы были восстановлены, даже если пользователи забыли вызвать shutdown(), вы должны организовать, чтобы неиспользуемые потоки в конечном счете умирали, устанавливая соответствующее время поддержания активности, используя нижнюю границу нулевых потоков ядра и / или установка allowCoreThreadTimeOut(логическое значение).
Так, например, ExecutorService, который создается Executors.newSingleThreadExecutor()
это пример FinalizableDelegatedExecutorService
, Теперь ExecutorService
класс имеет finalize()
метод, который вызывает shutdown()
метод обернутого объекта ExecutorService.