2.12 Einen Abbruch der virtuellen Maschine erkennen
Läuft ein Java-Programm, so kann der Benutzer es jederzeit beenden, indem er die virtuelle Maschine stoppt. Das kann er zum Beispiel durch die Tastenkombination + auf der Konsole oder auch durch Abbruchsignale vornehmen. Ein plötzlicher Programmabbruch kann aber für das Programm sehr unsicher sein, und zwar aus den gleichen Gründen wie bei einem unvermittelten Abbruch durch die stop()-Methode der Klasse Thread. Daher bietet Java durch einen Shutdown-Hook die Möglichkeit, das Abbruchsignal zu erkennen und sauber Ressourcen freizugeben. Das Teilwort Hook erinnert an einen Haken, der sich ins System einhängt, um Informationen abzugreifen. Der Hook ist ein initialisierter, aber noch nicht gestarteter Thread.
Beispiel |
Eine Endlosschleife schmort im eigenen Saft. Der eingefügte Hook reagiert auf das Ende der virtuellen Maschine. Das Programm muss auf der Konsole beendet werden, da die meisten Entwicklungsumgebungen das + nicht an die Java-Umgebung weiterleiten. Listing 2.48: com/tutego/insel/thread/ThatsMyEnd.java, main() Runtime.getRuntime().addShutdownHook( new Thread() { |
Zusätzlich zum bewussten Abbruch wird der Thread auch immer dann ausgeführt, wenn das Programm normal beendet wird. Es können mehrere Threads als Shutdown-Hooks installiert sein. Wenn sich dann die JVM beendet, werden die Threads in beliebiger Reihenfolge abgearbeitet.
Hinweis |
Wird unter Windows der Prozess mit dem Task-Manager beendet, läuft der Shutdown-Hook nicht! |
class java.lang.Runtime |
- void addShutdownHook(Thread hook)
Startet den angegebenen Thread, wenn die JVM beendet wird. Der Thread kann keinen neuen Thread unter dem Hook registrieren. Die run()-Methode des Threads sollte schnell ablaufen, um das Beenden der JVM nicht länger als nötig aufzuhalten. Es ist nicht möglich (vorgesehen), das bevorstehende Ende der JVM zu verhindern. - boolean removeShutdownHook(Thread hook)
Entfernt den angegebenen Hook. Der Rückgabewert ist true, falls der Hook registriert war und entfernt werden konnte.
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.