Когда мне нужно вызвать этот метод Runtime.getRuntime(). AddShutdownHook()
Когда мне действительно нужно вызвать этот метод Runtime.getRuntime(). addShutdownHook() и когда или почему мне нужно закрыть приложение. Может ли кто-нибудь объяснить мне это, указав несколько примеров.
Спасибо
Ответы
Ответ 1
Насколько я знаю, я объясню это ниже. Вы можете найти его и найти много информации.
addShutdownHook()
регистрирует некоторые действия, которые должны выполняться при завершении программы. Программа, которую вы запускаете, заканчивается двумя способами:
- основной поток (Root) заканчивает свой текущий контекст;
- программа встречает какую-то неожиданную ситуацию, поэтому она не может двигаться дальше.
Если вы добавите ShutdownHook, крючок запустит поток, который начнет работать только в момент завершения. Например:
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
System.out.println("Running Shutdown Hook");
}
});
напечатает a Running Shutdown Hook
во время завершения программы в любой точке. Вы даже можете назвать System.exit(0)
.
Например, вы можете использовать Google, их достаточно. И вопрос "Когда вы должны использовать это" - это вопрос: "Что делает catch
в инструкции try-catch
".
У вас может быть много ситуаций вроде:
- ваша программа создала много временных файлов в файловой системе, которую вы хотите удалить,
- вам нужно отправить сигнал бедствия другому процессу/машине перед завершением;
- выполнять любые действия по очистке, протоколирование или действия после ошибки при неожиданном поведении.
Все это потребуется в течение некоторого времени.
Примеры можно найти здесь Пример 1 или Пример 2
Ответ 2
Вы беспокоитесь только об остановках выключения, когда хотите, чтобы что-то произошло, когда на виртуальной машине произошло выключение.
От Javadoc:
Виртуальная машина Java отключается в ответ на два вида события:
- Программа завершается нормально, когда последний поток не-daemon выходит или когда вызывается метод exit (эквивалентно, System.exit) или
- Виртуальная машина завершается в ответ на прерывание пользователя, например, набирает ^ C или общесистемное событие, такое как выключение пользователя или выключение системы.
Таким образом, крюк отключения - это инициализированный и неармированный поток, который запускается при отключении JVM.
В серверах приложений (например, JBoss AS) существуют популярные примеры остановок. Когда вы нажимаете Ctrl + C, JVM вызывает все Runtime
завершающие крючки завершения (например, крючки отключения JBoss) перед выходом.
Ответ 3
В одном случае, если вы хотите, чтобы какие-либо потоки демонов, которые нужно остановить до выключения jvm (или) любых других потоков backend (в основном потоки daemon), должны быть изящно выведены, вы будете записывать завершающий крючок и выполнять его, используя приведенный выше код, Вот интересная дискуссия, которую мы провели на SO пару дней назад. Завершение работы