Titel | Inhalt | Suchen | Index | API | Go To Java 2, Zweite Auflage, Handbuch der Java-Programmierung |
<< | < | > | >> | Kapitel 22 - Multithreading |
Threads können in Java nicht nur ausgeführt und synchronisiert werden, sondern besitzen auch eine Reihe administrativer Eigenschaften, die besonders dann nützlich sind, wenn das Thread-Konzept stark genutzt wird. Diese administrativen Eigenschaften lassen sich in zwei Gruppen unterteilen. Zum einen gibt es Eigenschaften, die bei den Threads selbst zu finden sind, beispielsweise die Priorität oder der Name eines Threads. Zum anderen gibt es Eigenschaften, die darauf begründet sind, daß jeder Thread in Java zu einer Thread-Gruppe gehört, die untereinander über Vater-Kind-Beziehungen miteinander in Verbindung stehen. Beide Gruppen von Eigenschaften sollen im folgenden kurz erklärt werden.
Jeder Thread in Java hat einen eindeutigen Namen. Wird dieser nicht explizit vergeben (beispielsweise im Konstruktor), so vergibt Java einen automatisch generierten Namen der Form "Thread-" + n, wobei n ein int ist. Alternativ kann einem Thread mit der Methode setName auch vom Programm selbst ein Name zugewiesen werden:
public void setName(String name) |
java.lang.Thread |
Mit Hilfe der Methode getName kann der Name eines Threads abgefragt werden:
public String getName() |
java.lang.Thread |
Neben einem Namen besitzt ein Thread auch eine Priorität. Die Priorität steuert den Scheduler in der Weise, daß bei Vorhandensein mehrerer bereiter Threads diejenigen mit höherer Priorität vor denen mit niedrigerer Priorität ausgeführt werden. Beim Anlegen eines neuen Threads bekommt dieser die Priorität des aktuellen Threads. Mit Hilfe der Methode setPriority kann die Priorität gesetzt und mit getPriority abgefragt werden:
public void setPriority(int newPriority) public int getPriority() |
java.lang.Thread |
Als Parameter kann an setPriority ein Wert übergeben werden, der zwischen den Konstanten Thread.MIN_PRIORITY und Thread.MAX_PRIORITY liegt. Der Normalwert wird durch die Konstante Thread.NORM_PRIORITY festgelegt. In der aktuellen Version des JDK haben diese Konstanten die Werte 1, 5 und 10.
Thread-Gruppen dienen dazu, Informationen zu verwalten, die nicht nur für einen einzelnen Thread von Bedeutung sind, sondern für eine ganze Gruppe. Weiterhin bieten sie Methoden, die auf alle Threads einer Gruppe angewendet werden können, und sie erlauben es, die Threads einer Gruppe aufzuzählen. In der Java-Klassenbibliothek gibt es zu diesem Zweck eine eigene Klasse ThreadGroup.
Der Einstieg zur Anwendung von Objekten der Klasse ThreadGroup ist die Methode getThreadGroup der Klasse Thread. Sie liefert das ThreadGroup-Objekt, dem der aktuelle Thread angehört. Alle Thread-Gruppen sind über eine Vater-Kind-Beziehung miteinander verkettet. Mit Hilfe der Methode getParent von ThreadGroup kann die Vater-Thread-Gruppe ermittelt werden:
public ThreadGroup getParent() |
java.lang.ThreadGroup |
Durch mehrfache Anwendung kann so die Wurzel aller Thread-Gruppen ermittelt werden. Steht eine ThreadGroup ganz oben in der Hierarchie, so liefert die Methode getParent den Wert null.
Um die Menge aller Threads zu bestimmen, die in der aktuellen Thread-Gruppe und ihren Untergruppen enthalten sind, kann die Methode enumerate verwendet werden:
public int enumerate(Thread[] list) |
java.lang.ThreadGroup |
enumerate erwartet ein Array von Threads, das beim Aufruf mit allen Threads, die zu dieser Thread-Gruppe oder einer ihrer Untergruppen gehören, gefüllt wird. Das Array sollte vor dem Aufruf bereits auf die erforderliche Größe dimensioniert werden. Als Anhaltspunkt kann dabei das Ergebnis der Methode activeCount dienen, die die Anzahl der aktiven Threads in der aktuellen Thread-Gruppe und allen Thread-Gruppen, die die aktuelle Thread-Gruppe als Vorfahr haben, angibt:
public int activeCount() |
java.lang.ThreadGroup |
Titel | Inhalt | Suchen | Index | API | Go To Java 2, Zweite Auflage, Addison Wesley, Version 2.0 |
<< | < | > | >> | © 2000 Guido Krüger, http://www.gkrueger.com |