Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Eigene Klassen schreiben
6 Exceptions
7 Generics<T>
8 Äußere.innere Klassen
9 Besondere Klassen der Java SE
10 Architektur, Design und angewandte Objektorientierung
11 Die Klassenbibliothek
12 Bits und Bytes und Mathematisches
13 Datenstrukturen und Algorithmen
14 Threads und nebenläufige Programmierung
15 Raum und Zeit
16 Dateien, Verzeichnisse und Dateizugriffe
17 Datenströme
18 Die eXtensible Markup Language (XML)
19 Grafische Oberflächen mit Swing
20 Grafikprogrammierung
21 Netzwerkprogrammierung
22 Verteilte Programmierung mit RMI
23 JavaServer Pages und Servlets
24 Datenbankmanagement mit JDBC
25 Reflection und Annotationen
26 Dienstprogramme für die Java-Umgebung
A Die Begleit-DVD
Stichwort
Ihre Meinung?

Spacer
 <<   zurück
Java ist auch eine Insel von Christian Ullenboom
Das umfassende Handbuch
Buch: Java ist auch eine Insel

Java ist auch eine Insel
geb., mit DVD
1482 S., 49,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1506-0
Pfeil 14 Threads und nebenläufige Programmierung
  Pfeil 14.1 Nebenläufigkeit
    Pfeil 14.1.1 Threads und Prozesse
    Pfeil 14.1.2 Wie parallele Programme die Geschwindigkeit steigern können
    Pfeil 14.1.3 Was Java für Nebenläufigkeit alles bietet
  Pfeil 14.2 Threads erzeugen
    Pfeil 14.2.1 Threads über die Schnittstelle Runnable implementieren
    Pfeil 14.2.2 Thread mit Runnable starten
    Pfeil 14.2.3 Die Klasse Thread erweitern
  Pfeil 14.3 Thread-Eigenschaften und -Zustände
    Pfeil 14.3.1 Der Name eines Threads
    Pfeil 14.3.2 Wer bin ich?
    Pfeil 14.3.3 Die Zustände eines Threads *
    Pfeil 14.3.4 Schläfer gesucht
    Pfeil 14.3.5 Mit »yield()« auf Rechenzeit verzichten
    Pfeil 14.3.6 Der Thread als Dämon
    Pfeil 14.3.7 Das Ende eines Threads
    Pfeil 14.3.8 Einen Thread höflich mit Interrupt beenden
    Pfeil 14.3.9 »UncaughtExceptionHandler« für unbehandelte Ausnahmen
    Pfeil 14.3.10 Der »stop()« von außen und die Rettung mit ThreadDeath *
    Pfeil 14.3.11 Ein Rendezvous mit »join()« *
    Pfeil 14.3.12 Arbeit niederlegen und wieder aufnehmen *
    Pfeil 14.3.13 Priorität *
  Pfeil 14.4 Der Ausführer (Executor) kommt
    Pfeil 14.4.1 Die Schnittstelle »Executor«
    Pfeil 14.4.2 Die Thread-Pools
    Pfeil 14.4.3 Threads mit Rückgabe über Callable
    Pfeil 14.4.4 Mehrere Callable abarbeiten
    Pfeil 14.4.5 Mit ScheduledExecutorService wiederholende Ausgaben und Zeitsteuerungen
  Pfeil 14.5 Synchronisation über kritische Abschnitte
    Pfeil 14.5.1 Gemeinsam genutzte Daten
    Pfeil 14.5.2 Probleme beim gemeinsamen Zugriff und kritische Abschnitte
    Pfeil 14.5.3 Punkte parallel initialisieren
    Pfeil 14.5.4 »i++« sieht atomar aus, ist es aber nicht *
    Pfeil 14.5.5 Kritische Abschnitte schützen
    Pfeil 14.5.6 Schützen mit ReentrantLock
    Pfeil 14.5.7 Synchronisieren mit »synchronized«
    Pfeil 14.5.8 Synchronized-Methoden der Klasse »StringBuffer« *
    Pfeil 14.5.9 Mit synchronized synchronisierte Blöcke
    Pfeil 14.5.10 Dann machen wir doch gleich alles synchronisiert!
    Pfeil 14.5.11 Lock-Freigabe im Fall von Exceptions
    Pfeil 14.5.12 Deadlocks
    Pfeil 14.5.13 Mit »synchronized« nachträglich synchronisieren *
    Pfeil 14.5.14 Monitore sind reentrant – gut für die Geschwindigkeit *
    Pfeil 14.5.15 Synchronisierte Methodenaufrufe zusammenfassen *
  Pfeil 14.6 Synchronisation über Warten und Benachrichtigen
    Pfeil 14.6.1 Die Schnittstelle »Condition«
    Pfeil 14.6.2 It’s Disco-Time *
    Pfeil 14.6.3 Warten mit »wait()« und Aufwecken mit »notify()« *
    Pfeil 14.6.4 Falls der Lock fehlt: IllegalMonitorStateException *
  Pfeil 14.7 Zeitgesteuerte Abläufe
    Pfeil 14.7.1 Die Klassen »Timer« und »TimerTask«
    Pfeil 14.7.2 Job-Scheduler Quartz
  Pfeil 14.8 Einen Abbruch der virtuellen Maschine erkennen
  Pfeil 14.9 Zum Weiterlesen


Rheinwerk Computing - Zum Seitenanfang

14.8 Einen Abbruch der virtuellen Maschine erkennen  topZur vorigen Überschrift

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 Strg + C 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 Strg + C nicht an die Java-Umgebung weiterleiten.

Listing 14.31  com/tutego/insel/thread/ThatsMyEnd.java, main()

Runtime.getRuntime().addShutdownHook( new Thread() {
  @Override public void run() {
    System.out.println( "Jedes Leben endet tödlich." );
  }
} );

JOptionPane.showConfirmDialog( null, "Ende?" );
System.exit( 0 );

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 mit dem Task-Manager der Prozess 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. 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. >> Zum Feedback-Formular
 <<   zurück
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Java ist auch eine Insel






 Java ist auch
 eine Insel


Zum Katalog: Java SE Bibliotheken






 Java SE Bibliotheken


Zum Katalog: Professionell entwickeln mit Java EE 7






 Professionell
 entwickeln mit
 Java EE 7


Zum Katalog: Einstieg in Eclipse






 Einstieg in
 Eclipse


Zum Katalog: Einstieg in Java






 Einstieg in
 Java


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2011
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de