Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top