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

Как захватить событие System.exit?

У меня есть приложение в java, в котором я пытаюсь убедиться, что если кто-нибудь выйдет из кода System.exit() в коде, слушатель должен быть вызван, чтобы сделать некоторые вещи, такие как сообщение регистрации и освобождение ресурсов...

Как я могу его реализовать, любое предложение/подход приветствуется.

4b9b3361

Ответ 1

Метод Runtime.addShutdownHook может использоваться для добавления крюка выключения, который в основном представляет собой нестандартный Thread, который выполняется при выключении виртуальной машины Java.

Тем не менее, это территория, которая должна быть осторожно протестирована, поскольку она выполняется в очень чувствительное время жизненного цикла JVM. Из спецификации API для метода Runtime.addShutdownHook:

Завершающие крюки запускаются в сложное время в жизненном цикле виртуальной машины и поэтому его следует кодировать защищаясь. Они должны в в частности, поточно-безопасный и избегать взаимоблокировок насколько это возможно.

В любом случае, не забудьте немного узнать о том, как работают выключатели выключения, поскольку они, вероятно, не должны подходить без хорошей подготовки. Обязательно внимательно прочитайте Спецификацию API для метода Runtime.addShutdownHook.

Вот несколько статей, которые я нашел из поиска информации для этого ответа:

  • Shutdown Hooks - он показывает небольшой пример того, как добавлен крюк отключения для регистрации при завершении работы.

  • Конструкция API-интерфейсов Shutdown Hooks - описывает некоторые дизайнерские решения отключающих крючков в стиле вопросов и ответов.

Ответ 2

Функция Runtime.addShutdownHook(Thread thehook) позволяет зарегистрировать крючок в виртуальной машине Java.
Крючок работает как инициализированный, но нерасширенный поток, который будет вызываться JVM при выходе. Если вы зарегистрируете более одного крючка, обратите внимание, что порядок, в котором вызываются крючки, равен undefined.