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 angesehen 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 kann man sofort wissen, was läuft.
Kann man die laufenden Threads umbenennen, anstatt Patches für die von uns verwendeten Bibliotheken zu schreiben? Oder wenn das überhaupt eine gute Idee ist? Irgendwelche Vorschläge würden geschätzt.
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 das Verständnis der Vorgänge in Ihrer Anwendung erschweren. 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?
BEARBEITEN: Fügt Text zurück, der irgendwie am Ende verschwunden ist
Ja, Sie können den Namen eines Threads mit dem setName () Methode.
Ob es eine gute Idee ist, ist nicht sicher, aber es ist eine sehr schlechte Entscheidung, sich auf den Namen des Threads für alles andere als eine lesbare Beschreibung zu verlassen, und die meisten Bibliotheken werden das nicht tun. Daher ist es unwahrscheinlich, dass Sie etwas kaputt machen, wenn Sie sie umbenennen.
Sie können Thread.enumerate()
oder Thread.getAllStackTraces()
verwenden, um eine Liste der laufenden Threads zu erhalten. Sie können dann Thread.setName()
für jeden aufrufen.
Ich kann dir nicht sagen, ob es eine gute Idee ist oder nicht, aber ich würde mich wahrscheinlich auf "Nein" konzentrieren. Je mehr Code Sie schreiben, desto mehr Code müssen Sie pflegen.
Dies wirft die Frage nach den Best Practices für Namenskonventionen für Threads auf. Ich habe in dieser Hinsicht keine Gemeinschaftsberatung gesehen.
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 erlauben, den Stack-Trace als Beispiel zu verwenden class / methods / Dateinamensnamen als Hinweis darauf, wie der Thread aufgerufen werden soll.
Tags und Links java multithreading naming