Как захватить событие System.exit? - PullRequest
25 голосов
/ 27 мая 2009

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

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

Ответы [ 2 ]

51 голосов
/ 27 мая 2009

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

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

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

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

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

6 голосов
/ 27 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...