Comment capturer l'événement System.exit?
Question
J'ai une application en java, où je tente de faire en sorte que l'un auditeur doit être appelé si quelqu'un sort des codes System.exit () dans le code, de faire des choses comme un message de journalisation et de libérer les ressources ...
Comment puis-je mettre en œuvre, toute suggestion / approche est la bienvenue.
La solution
Le méthode Runtime.addShutdownHook
peut être utilisé pour ajouter un crochet d'arrêt, qui est essentiellement un Thread
Non Commencées, qui exécute à l'arrêt de la machine virtuelle Java.
Cependant, c'est un territoire qui doit être soigneusement la bande de roulement, car il est en cours d'exécution à un moment très sensible du cycle de vie de la machine virtuelle Java. De l'API Spécifications pour la méthode Runtime.addShutdownHook
:
crochets d'arrêt fonctionnent à un moment délicat dans le cycle de vie d'une machine virtuelle et devrait donc être codé défensivement. Ils devraient, en particulier, être écrit pour être thread-safe et éviter les blocages dans la mesure du possible.
En tout état de cause, assurez-vous de lire un peu sur la façon dont les crochets d'arrêt de travail, car ils ne devraient probablement pas être abordés sans une bonne préparation. Assurez-vous de lire attentivement la spécification API pour la méthode Runtime.addShutdownHook
.
Voici ce sont quelques articles que je trouve de la recherche d'informations pour cette réponse:
-
crochets d'arrêt - il montre un petit exemple de la façon dont un crochet d'arrêt est ajouté pour la connexion à l'arrêt.
-
Conception des crochets d'arrêt API - traite des décisions de conception de crochets d'arrêt dans un style de questions et réponses
.
Autres conseils
La Runtime.addShutdownHook(Thread thehook)
fonction vous permet d'enregistrer un crochet dans la machine virtuelle Java.
Le crochet fonctionne comme un fil initialisé mais Non Commencées, qui sera appelé par la machine virtuelle Java à la sortie. Si vous enregistrez plus d'un crochet, notez que l'ordre dans lequel les crochets sont appelés est indéfini.