Konrad-Adenauer-Gymnasium Langenfeld

Informatik Grundkurs Q1

Threadgruppen

Threads können zu Gruppen zusammengefasst werden. Dazu deklariert man ein Objekt der Klasse ThreadGroup und gibt beim Konstruktor eines Threads an, zu welcher Gruppe er gehört.

Wir werden das Zählerbeispiel aus dem vorherigen Blatt schrittweise erweitern. Zuerst erhält der Konstruktor von Zaehler einen weiteren Parameter vom Typ ThreadGroup, über den man festlegt, zu welcher Threadgruppe er gehört:

Thread-Klasse (Zaehler.java)

Der Name eines solchen Threads Zaehler setzt sich aus dem Namen seiner Thread-Gruppe, den man mit der Methode getName() der Klasse ThreadGroup erhält, und seiner Nummer nr zusammen.

Die Zaehler sollen zu speziellen Thread-Gruppen gehören, deren Elemente man durch einen einzigen Methodenaufruf starten kann. Dazu definieren wir die Klasse meineGruppe als Subklasse von ThreadGroup:

ThreadGroup-Klasse (meineGruppe.java)

In der Methode starten() muss zunächst die Menge der zu dieser Gruppe gehörenden Threads bestimmt werden. Die Methode enumerate() sammelt diese Threads in einem Thread-Feld. Seine Länge bestimmt man über die Methode activeCount(), die die Anzahl der aktiven Threads dieser Gruppe liefert.

Mit der Methode setMaxPriority() kann man die maximale Priorität festlegen, die von jetzt an für die Mitglieder dieser Gruppe gelten.

Es werden zwei Gruppen von Zählern definiert und gestartet. Zuvor wird mit der Methode list() Information über die Gruppe und ihre Mitglieder ausgegeben:

Hauptklasse (ThGroup.java)

Die Zugehörigkeit von Threads zu einer Thread-Gruppe kann nur beim Konstruktor angeben werden; eine spätere Zuordnung oder Änderung ist nicht möglich.

Thread-Gruppen können neben Threads auch weitere Thread-Gruppen enthalten, so dass eine Baumstruktur von Thread-Gruppen und Threads möglich ist.

Methoden der Klasse ThreadGroup

ThreadGroup(String name)

ThreadGroup(ThreadGroup Vorgaenger, String name)

  • Erzeugt eine Thread-Gruppe mit dem angegebenen Namen
  • Eine Unter-Thread-Gruppe wird mit dem zweiten Konstruktor erzeugt. Vorgaenger ist dabei die Vorgänger-Gruppe.

int activeCount()

Liefert die Anzahl der in dieser Gruppe aktiven Threads.

int enumerate(Thread[] Liste)

Kopiert den aktiven Thread in Liste. Ist diese zu kurz, werden die übrigen Threads stillschweigend ignoriert. Die Methode liefert die Anzahl der kopierten Threads zurück.

final void setMaxPriority(int Prio)

Legt die maximale Priorität der Gruppe fest. Threads, die bereits vorher eine höhere Priorität hatten, bleiben unverändert.

void list()

Gibt Informationen über die Thread-Gruppe auf dem Standard-Ausgabegerät aus.


© Ralph-Erich Hildebrandt, 27. September 2004