Wie man ein Java-Thread zur Laufzeit finden . Darüber hinaus müssen Sie daran denken, Ihre Faden nennen , wenn Sie es schaffen . Andernfalls, wenn Sie nicht benennen deinen Thread , sind Sie auf der Standard- Mechanismus für die Namensgebung Fäden in Java gebaut verlassen , und während Sie in der Lage zu erraten, was der Thread-Namen sein sollte, gibt es keine Garantie wird es die gleichen Namen auf Laufzeit alle Plattformen und Java-Versionen . Things You
Java Runtime Environment Version 6 oder höher
brauchen anzeigen Weitere Anweisungen
1
schaffen den Rahmen für eine Java-Anwendung Klasse namens "Suchen. " Geben Sie einfach eine leere main ( )-Methode als Ausgangspunkt.
Public class Finden {
public static void main (String args [ ] ) { }
}
2
erstellen Runnable-Objekt und Thema , damit Sie etwas zu finden haben . Nennen Sie das Thema " Sleeper " durch ein zweites Argument an den Konstruktor Thema , wobei das erste Argument ist die Runnable Referenz. Nach dem Erstellen des Thema , starten Sie es , indem Sie seine start ( )-Methode. Der folgende Code startet die nun leere main ( )-Methode Definition :
Runnable runner = new Runnable () {
public void run () { try {
Thread.sleep ( 50000 );
} catch ( InterruptedException e) {
//ignorieren
}
}
};
Thema t = new Thread ( Läufer , " Sleeper ");
t.start ();
3
finden Sie den Faden mit Hilfe von ThreadGroup . Alle Themen gehören zu einer ThreadGroup . Diese Gruppen sitzen in einem Baum, wo alle Gruppen einen übergeordneten Knoten ( Knoten und Kinder ) haben , mit Ausnahme der Wurzel des Baumes , die keine Eltern haben . Unter der Annahme, den Faden zu finden, ist nicht in der aktuellen Threads ThreadGroup , zu Fuß bis zur Spitze des Baumes , indem man die Konzernmutter . So, wenn Sie die " Sleeper "-Gewinde finden gehen, werden Sie wissen, dass Sie es gefunden haben , da alle aktiven Threads Kinder der Overlord übergeordneten Thread sein wird.
Thema currentThread = Thread.currentThread ( );
ThreadGroup group = currentThread.getThreadGroup ();
while ( group.getParent () = null) {
group = group.getParent (); !
}
4
Verwenden Sie die enumerate ()-Methode ThreadGroup um alle Kinder Themen dieses Super übergeordneten Gruppe . Das Verfahren speichert die aktiven Threads in einem Array
int activeCount = group.activeCount (); .
Thema activeThreads [] = new Thread [ activeCount +5] ;
int actualCount = group.enumerate ( activeThreads ), - " . Sleeper "
5
Verwenden Sie die activeThreads Array zu helfen, finden Sie die fehlende Thread hier , markierte das eine Einmal gefunden , verwenden Sie die DumpStack ()-Methode , um einen Stacktrace des Fadens bieten :
Thema gefunden = null;
for (int i = 0; i < actualCount ; i + +) {
if ( " Sleeper " equals ( activeThreads [i] getName ()). . ) {
gefunden = activeThreads [i] ;
break;
< p >} }
if ( gefunden = null ) {
found.dumpStack (); }
6 < p> Da die Schließung Zeile zu Ihrer main ( )-Methode , dem System mitteilen, um zu beenden out of memory :
System.exit (0);
7
Kompilieren und starten Sie Ihr Programm . Während die Zeilennummern in der Stack-Trace etwas unterschiedlich sein könnte , basierend auf Dingen wie Klammern Stil , sie alle sollten die gleichen allgemeinen Ausgang