Wie System.exit Ereignis zu erfassen?
Frage
Ich habe eine Anwendung in Java, in denen ich versuche, um sicherzustellen, dass das, wenn jemand verläßt Codes System.exit () im Code soll ein Zuhörer die Ressourcen einige Dinge zu tun, wie Nachrichtenprotokollierung und Loslassen aufgerufen werden ...
Wie ich es umsetzen kann, jede Anregung / Ansatz ist willkommen.
Lösung
Die Runtime.addShutdownHook
Verfahren verwendet werden können, einen Shutdown-Hook an, die im Grunde ein unstarted Thread
ist, die beim Abschalten der Java Virtual Machine ausgeführt wird.
Allerdings ist dieses Gebiet, das sorgfältig beschreiten werden sollte, da es zu einem sehr sensiblen Zeitpunkt des Lebenszyklus des JVM ausgeführt wird. Aus den API-Spezifikationen für die Runtime.addShutdownHook
Methode:
Shutdown Haken in einer heiklen Zeit laufen im Lebenszyklus einer virtuellen Maschine und sollte daher codiert werden abwehrend. Sie sollten in Insbesondere geschrieben zu sein Thread-sicher und Deadlocks zu vermeiden soweit möglich.
In jedem Fall sollten Sie ein wenig lesen, wie Herunterfahren Haken arbeiten, da sie wahrscheinlich nicht ohne gute Vorbereitung angegangen werden sollen. Achten Sie darauf, sorgfältig die API-Spezifikation für die Runtime.addShutdownHook
Methode zu lesen.
Hier sind ein paar Artikel, die ich von der Suche nach Informationen für diese Antwort gefunden:
-
Shutdown Hooks - es zeigt ein kleines Beispiel dafür, wie ein Shutdown-Hook für die Anmeldung beim Herunterfahren hinzugefügt wird.
-
Gestaltung der Shutdown Hooks API - behebt einige Designentscheidungen des Abschaltens Haken in einer Frage-und-Antwort-Stil
.
Andere Tipps
Die Funktion Runtime.addShutdownHook(Thread thehook)
können Sie einen Haken in die Java Virtual Machine registrieren.
Der Haken arbeitet als initialisiert aber unstarted Faden, der durch die JVM beim Ausleiten aufgerufen wird. Für den Fall, registrieren Sie mehr als einen Haken, beachten Sie, dass die Reihenfolge, in der die Haken genannt werden, ist nicht definiert.