Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage
<< | < | > | >> | API | Kapitel 22 - Multithreading

## 22.5 Verwalten von Threads

- 22.5 Verwalten von Threads
  - 22.5.1 Priorität und Name
  - 22.5.2 Thread-Gruppen

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.

### 22.5.1 Priorität und Name

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.

### 22.5.2 Thread-Gruppen

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 | DOC | Handbuch der Java-Programmierung, 3. Auflage, Addison Wesley, Version 3.0
<< | < | > | >> | API | © 1998-2002 Guido Krüger, http://www.javabuch.de