Das ungeplante Beenden einer Anwendung, z.B. durch drücken von STRG + C auf der Konsole oder Abbruchsignale, kann Probleme nach sich ziehen, wenn Ressourcen nicht mehr freigegeben oder inkonsistente Zustände hinterlassen werden. Glücklicherweise kann auf das ungeplante Beenden der JVM per Shutdown Hook reagiert werden.

Shutdown Hooks werden bei der Laufzeitumgebung als Threads registriert, die beim Beenden parallel abgearbeitet werden. Erst danach wird die Anwendung wirklich gestoppt. Es sollte deshalb darauf geachtet werden, Shutdown Hooks threadsicher zu implementieren, Deadlocks zu vermeiden und die Ausführungszeit so gering wie möglich zu halten.

Registriert werden Shutdown Hooks wie folgt:

package de.patrickgotthard.shutdownhook;

public class Main {

    public static void main(final String[] args) {

        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            System.out.println("Initiating shutdown sequence");
        }));

    }

}