Gibt es in Java Thread-Gruppen-lokale Variablen?

8

Ich bin auf der Suche nach einer Klasse ähnlich ThreadLocal, die auf Thread-Gruppen statt Threads funktionieren würde.

Wenn es eine solche Klasse (in einer Open-Source-Bibliothek) nicht gibt, wie würden Sie sie implementieren? Eine bessere Idee als Thread-Gruppen in WeakHashMap zu haben?

Ich implementiere ein Debugger-Framework, das in der Laufzeit mit verschiedenen Parametern in globalen, pro Thread- und pro Thread-Gruppenkontexten einstellbar ist. Als sehr einfaches Beispiel können Sie eine Reporting-Anweisung haben:

%Vor%

und geben Sie an, dass der Protokolleintrag mit dieser bestimmten Kategorie nur angezeigt wird, wenn er von einem Thread in einer Gruppe von Threads aufgerufen wird, die Netzwerkanforderungen bearbeiten.

    
Viliam 06.01.2010, 23:32
quelle

3 Antworten

4

Ich würde einen Werthalter in einem lokalen Thread speichern und ihn für alle Threads der gleichen Gruppe auf den gleichen Werthalter initialisieren.

%Vor%

und dann

verwenden %Vor%

Das tut (erwarten für die Initialisierung) genau wie ein Thread lokal.

    
akuhn 07.01.2010, 00:18
quelle
5

ThreadGroup wird selten verwendet, daher gibt es keine Plattformunterstützung.

Die Verwendung von [ Weak / Identity / Concurrent ] HashMap<ThreadGroup,T> wird nur funktionieren, wenn nicht sehr schnell. Sie möchten wirklich, dass die Karte alle schwach, identisch und gleichzeitig ist, aber mit der Java-Bibliothek, die Sie derzeit nur auswählen können.

Um die Leistung zu verbessern, beachten Sie, dass Thread s ThreadGroup nicht ändert. Zwischenspeichern Sie daher den Wert mit einem ThreadLocal (override initialValue ). ThreadLocal hat eine gute Leistung (ein paar Dutzend Zyklen pro get ).

    
Tom Hawtin - tackline 07.01.2010 00:11
quelle
2

Als ich das letzte Mal die Implementierung (vor ein paar Jahren) angeschaut habe, wurden Thread-Locals als einfache Hash-Tabelle implementiert, die von der Thread-ID indiziert wurde. Nichts Besonderes und Meilen entfernt von der Effizienz von C ++.

Sie können dasselbe tun und das Thread-Gruppenobjekt als Schlüssel für Ihre eigene Thread-Gruppen-Hash-Tabelle verwenden.

    
Lothar 06.01.2010 23:52
quelle

Tags und Links