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.
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
).
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.
Tags und Links java multithreading