Подтвердить что ты не робот

Когда мне нужно вызвать этот метод Runtime.getRuntime(). AddShutdownHook()

Когда мне действительно нужно вызвать этот метод Runtime.getRuntime(). addShutdownHook() и когда или почему мне нужно закрыть приложение. Может ли кто-нибудь объяснить мне это, указав несколько примеров.

Спасибо

4b9b3361

Ответ 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 пару дней назад. Завершение работы