System.exit()
kann verwendet werden, um Shutdown-Hooks auszuführen , bevor das Programm beendet wird. Dies ist eine bequeme Möglichkeit, das Herunterfahren in größeren Programmen zu handhaben, in denen sich alle Teile des Programms nicht bewusst sein können (und sollten). Wenn jemand beenden möchte, kann er einfach anrufen System.exit()
, und die Shutdown-Hooks (sofern ordnungsgemäß eingerichtet) sorgen für alle erforderlichen Shutdown-Zeremonien wie das Schließen von Dateien, das Freigeben von Ressourcen usw.
"Diese Methode kehrt nie normal zurück." bedeutet nur, dass die Methode nicht zurückkehrt; Sobald ein Thread dorthin geht, kommt er nicht mehr zurück.
Eine andere, vielleicht häufigere Möglichkeit, ein Programm zu beenden, besteht darin, einfach das Ende der main
Methode zu erreichen . Wenn jedoch Nicht-Daemon-Threads ausgeführt werden, werden diese nicht heruntergefahren und die JVM wird daher nicht beendet. Wenn Sie also solche Nicht-Daemon-Threads haben, benötigen Sie andere Mittel (als die Shutdown-Hooks), um alle Nicht-Daemon-Threads herunterzufahren und andere Ressourcen freizugeben. Wenn keine anderen Nicht-Daemon-Threads vorhanden sind, wird durch die Rückkehr von main
die JVM heruntergefahren und die Shutdown-Hooks aufgerufen.
Aus irgendeinem Grund scheinen Shutdown-Hooks ein unterbewerteter und missverstandener Mechanismus zu sein, und die Leute erfinden das Rad mit allen Arten von proprietären benutzerdefinierten Hacks neu, um ihre Programme zu beenden. Ich würde die Verwendung von Abschalthaken empfehlen. Es ist alles in der Standard- Laufzeit vorhanden , die Sie sowieso verwenden werden.