Ist es eine gute Idee, die Namen von Verarbeitungs-Threads in Java dynamisch zu ändern?

8

Wir haben eine Java-Anwendung, die Anfragen verarbeitet. Natürlich gibt es einen Thread-Pool mit Threads, die mit einigen unbedeutenden Namen wie "Prozessor-1", "Prozessor-2" usw. benannt sind. Wir fragen uns, ob es eine gute Idee ist, den Verarbeitungsthread jedes Mal umzubenennen, wenn eine Anfrage an einen Namen gesendet wird das würde anzeigen, welche Anfrage verarbeitet wird.

Ich habe das Gefühl, dass etwas nicht stimmt, aber ich kann mir keinen guten Grund vorstellen. Ich kann mich an mehrere Fälle erinnern, in denen Multithreading-Probleme aus Thread-Dumps analysiert wurden, und es war mir sehr wichtig zu wissen, ob ich den gleichen Thread in zwei aufeinander folgenden Dumps sehe oder nicht. Allerdings merke ich, dass ich stattdessen die Thread-ID ansehen könnte. In log4j-Protokollen ist es üblich, den Thread-Namen zu schreiben, und ich erinnere mich an viele Fälle, in denen ich ihn filterte. Aber ich bin mir nicht sicher, ob ich hier eine gute "Verteidigungslinie" habe.

Was ist die übliche Praxis? Ist es eine gute Idee, Threads weiter zu benennen?

Es gibt verwandte Fragen wie Umbenennen von Threads in Java oder Sollen Threads in Java für ein einfacheres Debuggen benannt werden? , aber sie adressieren dies nicht Problem.

    
victor.bronstein 05.06.2011, 19:22
quelle

2 Antworten

4

Es ist eine gute Idee.

Der einzige Zweck des Thread-Namens ist die Diagnose. Daher sollten Sie Threads benennen / umbenennen, damit Sie besser verstehen, was zur Laufzeit passiert.

Speziell für Threads in einem Thread-Pool. Ihre Identitäten sind bedeutungslos. Es ist funktional äquivalent, einen neuen Thread pro Aufgabe zu haben. Wir kümmern uns nur um die Aufgabennamen, und der Thread-Name ist ein praktischer Ort, um einen Aufgabennamen zu speichern.

    
irreputable 06.06.2011 01:47
quelle
3

Ich würde jedem Thread einen aussagekräftigen, aber nicht dynamisch ändernden Namen geben.

Das Speichern von Informationen darüber, welche Anfrage verarbeitet wird, klingt gut, aber das Speichern im Thread-Namen riecht. Sie könnten diese Informationen protokollieren oder in einem ThreadLocal oder ...?

speichern     
Matt Ball 05.06.2011 19:29
quelle

Tags und Links