JVM Shutdown Hooks – Aktionen beim Beenden der JVM ausführen

veröffentlicht am 22. April 2012

Ich habe mir schon ein paar Mal die Frage gestellt, wie man auf das ungeplante Beenden einer Anwendung reagieren kann, also z.B. wenn der Benutzer ein Kommandozeilenprogramm per STRG + C abbricht. Heute habe ich mich mal schlau gemacht und bin bei den relativ unbekannten JVM Shutdown Hooks fündig geworden.

Solche JVM Shutdown Hooks sind sehr einfach zu implementieren. Es muss einfach ein Thread erzeugt werden, der als Shutdown Hook in die JVM eingebunden und automatisch beim Beenden der JVM ausgeführt wird.

Zur Erläuterung dient  folgendes, sehr einfaches Beispiel. Zunächst habe ich ein Runnable implementiert:

public class ShutdownHook implements Runnable {

	@Override
	public void run() {
		System.out.println("Called the shutdown hook!");
	}

}

Der Code innerhalb der run-Methode wird später automatisch beim Beenden der JVM ausgeführt. Dazu kommt dann noch eine Klasse zur Ausführung der Anwendung:

public class Main {

	public static void main(String[] args) {
		Thread shutdownHook = new Thread(new ShutdownHook());
		Runtime.getRuntime().addShutdownHook(shutdownHook);
	}

}

Aus dem Runnable wird hier zunächst ein Thread-Objekt erzeugt. Wer möchte, kann auch gleich bei der Implementierung des Shutdown Hooks von Thread ableiten, die Implementierung von Runnable ist aber in der Regel vorzuziehen. Danach wird der erzeugte Thread einfach bei der JVM als Shutdown Hook registriert und somit automatisch beim Beenden der JVM ausgeführt.

Shutdown Hooks sollten jedoch mit Bedacht eingesetzt werden. In einigen Situationen steht der JVM nur eine begrenzte Zeit zum Beenden zur Verfügung, z.B. wenn der Benutzer das System herunter fährt. Weitere Details findet man in der Java Dokumentation.

Quellen und weiterführende Links

Hinterlasse einen Kommentar