2009-01-21 14 views
7

Ich arbeite an einem Projekt, das langsam größer und größer wird und die Anzahl der aktiven Threads, die von vielen verschiedenen Prozessen verwendet werden, steigt. In letzter Zeit habe ich mir die laufenden Threads im Debugger genauer angeschaut und festgestellt, dass viele meiner Drittanbieter-Bibliotheken ihren Threads sehr schlechte Namen gegeben haben - Timer-0, qtp0 usw. Ich möchte, dass andere Entwickler nicht vertraut sind mit den schlecht benannten Threads, um sofort zu wissen, was läuft.Umbenennen von Threads in Java

Anstatt Patches für die von uns verwendeten Bibliotheken zu schreiben, weiß jemand, wie man die laufenden Threads umbenennt? Oder wenn das überhaupt eine gute Idee ist? Irgendwelche Vorschläge würden geschätzt werden.

+4

Nur neugierig hier - ärgert schlecht benannte Threads jemand anderes? – Elijah

+0

Sie sollten die Bibliotheken reparieren, die fehlerhafte oder nicht benannte Threads erstellen.Ich würde es hassen, die Threads der Bibliotheken zu debuggen, nur um festzustellen, dass sich die Namen wo anders ändern. –

+0

Guter Punkt. Ich sollte versuchen, die Änderungen in den nächsten Veröffentlichungen zu sehen. Ich möchte keine Namen nennen, aber es sind alles Open-Source-Projekte. – Elijah

Antwort

4

Wenn das Problem in Open-Source-Bibliotheken auftritt, ist es die beste Lösung, diesen Produkten Patches zur besseren Thread-Benennung bereitzustellen. Wenn ein Sicherheitsmanager nicht ausgeführt wird, können Sie einen beliebigen Thread umbenennen, indem Sie Threads (wie von anderen bereits erwähnt) auflisten und jedem einen beliebigen Namen zuweisen. Dies ist jedoch eine fragile Möglichkeit, Threads zu benennen, die nicht Ihre eigenen sind. Wenn die Bibliothek der Drittanbieter ihre Benennung ändert, müssen Sie Ihren Code ändern.

Ich stimme zu, dass Bibliotheken von Drittanbietern mit schlecht benannten Threads schwieriger zu verstehen, was in Ihrer Anwendung vor sich geht. Das Umbenennen von Threads aus einer Bibliothek von Drittanbietern ist jedoch riskant. Was passiert, wenn ihre nächste Version die Art ändert, wie sie Threads benennen? Und wie gehst du mit einer 3rd-Party-Bibliothek um, die gar nicht versucht, Threads zu benennen?

EDIT: Fügen Sie Text zurück, die irgendwie aus dem Ende verschwunden

2

Sie können Thread.enumerate() oder Thread.getAllStackTraces() verwenden, um eine Liste der laufenden Threads zu erhalten. Sie können dann jeweils Thread.setName() anrufen.

Ich kann Ihnen nicht sagen, ob es eine gute Idee ist oder nicht, aber ich würde wahrscheinlich auf "Nein" neigen. Je mehr Code Sie schreiben, desto mehr Code müssen Sie pflegen.

6

Ja, Sie können den Namen eines Threads mit der setName() Methode ändern.

Ob es eine gute Idee ist, gibt es keine sichere Aussage, aber auf den Thread-Namen für alles andere als eine lesbare Beschreibung zu verlassen wäre eine sehr schlechte Entscheidung, und die meisten Bibliotheken werden dies nicht tun. Daher ist es unwahrscheinlich, dass Sie etwas kaputt machen, wenn Sie sie umbenennen.

+1

Der einzige Zweck wäre für die menschliche Lesbarkeit. – Elijah

1

setName() kann verwendet werden, um den Namen eines Threads zu ändern, aber Sie müssen eine Möglichkeit haben, zu bestimmen, wie der Thread aufgerufen werden soll.
getAllStackTraces() würde dem Programm ermöglichen, das Stack-Tracebeispiel zu verwenden und die Klassen-/Methoden-/Dateinamennamen als Hinweis darauf zu verwenden, was den Thread aufrufen soll.

5

ich alle Themen nenne ich erstellen. Ich hatte zu viele Apps undichte Threads oder Threads, die sonst außer Kontrolle geraten.

Je mehr Sie Java als Betriebssystem behandeln, desto einfacher wird es zu verwalten. :)

1

Dies wirft die Frage der Best Practices um Namenskonventionen für Threads. Ich habe in dieser Hinsicht keine Gemeinschaftsberatung gesehen.

1

ändern Java-Thread-Name

Thread.currentThread().setName("MyThread");