Comment capturer le système.la sortie de l'événement?

J'ai une application en java, dans laquelle j'essaie de m'assurer que le si quelqu'un quitte le système de codes.exit() dans le code, un écouteur doit être appelé pour faire des choses comme la journalisation du message et la libération des ressources ...

Comment puis-je l'implémenter, toute suggestion/approche est la bienvenue.

24
demandé sur harshit 2009-05-27 12:48:18

2 réponses

Le Runtime.addShutdownHook la méthode peut être utilisée pour ajouter un crochet d'arrêt, qui est essentiellement un Thread non démarré, qui s'exécute à l'arrêt de la Machine virtuelle Java.

Cependant, c'est un territoire qui doit être parcouru avec précaution, car il est exécuté à un moment très sensible du cycle de vie de la JVM. À partir des spécifications de L'API pour la méthode Runtime.addShutdownHook:

Les 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 doivent, en en particulier, être écrit pour être thread-safe et pour éviter les blocages dans la mesure du possible.

Dans tous les cas, assurez-vous de lire un peu sur le fonctionnement des crochets d'arrêt, car ils ne devraient probablement pas être abordés sans une bonne préparation. Assurez-vous de lire attentivement la spécification de L'API pour la méthode Runtime.addShutdownHook.

Voici quelques articles que j'ai trouvés en cherchant des 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 journalisation à l'arrêt.

  • Conception de L'API Shutdown Hooks -- aborde certaines décisions de conception de Shutdown hooks dans un style question-Réponse.

50
répondu coobird 2016-07-22 10:22:57

La fonction Runtime.addShutdownHook(Thread thehook) vous permet d'enregistrer un hook dans la Machine virtuelle Java.
Le hook fonctionne comme un thread initialisé mais non démarré, qui sera appelé par la JVM à la sortie. Dans le cas où vous Enregistrez plus d'un crochet, notez que l'ordre dans lequel les crochets sont appelés est indéfini.

5
répondu Silfverstrom 2015-06-23 13:08:38