Когда мне действительно нужно вызвать этот метод Runtime.getRuntime(). addShutdownHook() и когда или почему мне нужно закрыть приложение. Может ли кто-нибудь объяснить мне это, указав несколько примеров.
Спасибо
Когда мне действительно нужно вызвать этот метод Runtime.getRuntime(). addShutdownHook() и когда или почему мне нужно закрыть приложение. Может ли кто-нибудь объяснить мне это, указав несколько примеров.
Спасибо
Насколько я знаю, я объясню это ниже. Вы можете найти его и найти много информации.
addShutdownHook()
регистрирует некоторые действия, которые должны выполняться при завершении программы. Программа, которую вы запускаете, заканчивается двумя способами:
Если вы добавите 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
".
У вас может быть много ситуаций вроде:
Все это потребуется в течение некоторого времени.
Вы беспокоитесь только об остановках выключения, когда хотите, чтобы что-то произошло, когда на виртуальной машине произошло выключение.
От Javadoc:
Виртуальная машина Java отключается в ответ на два вида события:
- Программа завершается нормально, когда последний поток не-daemon выходит или когда вызывается метод exit (эквивалентно, System.exit) или
- Виртуальная машина завершается в ответ на прерывание пользователя, например, набирает ^ C или общесистемное событие, такое как выключение пользователя или выключение системы.
Таким образом, крюк отключения - это инициализированный и неармированный поток, который запускается при отключении JVM.
В серверах приложений (например, JBoss AS) существуют популярные примеры остановок. Когда вы нажимаете Ctrl + C, JVM вызывает все Runtime
завершающие крючки завершения (например, крючки отключения JBoss) перед выходом.
В одном случае, если вы хотите, чтобы какие-либо потоки демонов, которые нужно остановить до выключения jvm (или) любых других потоков backend (в основном потоки daemon), должны быть изящно выведены, вы будете записывать завершающий крючок и выполнять его, используя приведенный выше код, Вот интересная дискуссия, которую мы провели на SO пару дней назад. Завершение работы