Konsten att hitta trådarna vid körning innebär två Java-klasser , tråd och ThreadGroup . Dessutom måste du komma ihåg att namnge din tråd när du skapar den . Annars , om du inte namnge din tråd , är du beroende på standard namngivning mekanism för trådar inbyggda i Java , och medan du kanske kan gissa vad tråden namnet borde vara , det finns ingen garanti att det kommer att vara samma namn över alla runtime plattformar och Java-versioner . Saker du behöver Review, Java Runtime Environment version 6 eller högre
Visa fler instruktioner
1
Skapa ramen för ett Java-program klass som heter " Sök . " Bara ge en tom main ( ) metoden som utgångspunkt .
Public class Hitta {
public void main ( String args [ ] ) {
}
}
2
Skapa en Runnable objekt och tråd så att du har något att hitta . Namnge tråden " Sleeper " genom ett andra argument till ämnet konstruktören , där det första argumentet är det Runnable referens . När du har skapat tråd , starta den genom att anropa dess start ( ) metoden . Följande kod börjar den nu tomma main ( ) metoden definition :
Runnable löpare = ny Runnable ( ) {
public void run ( ) {
try {
Thread.sleep ( 50000 ) ,
} catch ( InterruptedException e ) {
//ignorera
}
}
};
Thread t = new Thread ( löpare , " Sleeper " ) ;
t.start ( ) ;
3
hitta tråden med hjälp av ThreadGroup . Alla trådar tillhör en ThreadGroup . Dessa grupper sitter i ett träd där alla grupper har en förälder nod ( och barn noder ) , utom roten av trädet , som inte har någon förälder . Förutsatt tråden att hitta är inte i den aktuella tråden är ThreadGroup , gå upp till toppen av trädet genom att titta på gruppens moderbolag . På det sättet , när du går att hitta " Sleeper " gänga , vet du att du har hittat det eftersom alla aktiva trådar blir barn av overlord förälder tråden .
Thread currentThread = Thread.currentThread ( ) ;
ThreadGroup group = currentThread.getThreadGroup ( ) ;
samtidigt ( group.getParent ( ) = null ) {
grupp = group.getParent ( ) ; !
}
4
Använd räkna ( ) metoden för ThreadGroup att gruppera alla barn trådar i denna super förälder . Metoden sparar de aktiva trådarna i en array
int activeCount = group.activeCount ( ) , .
Tråd activeThreads [ ] = new Thread [ activeCount +5 ] ;
int actualCount = group.enumerate ( activeThreads ) , - " . Sleeper "
5
Använd activeThreads array för att hjälpa till att hitta den saknade tråd här , den ena märkt En gång hittade , använd dumpStack ( ) metod för att ge en stacktrace av tråden :
Thread hittade = null ;
for (int i = 0 ; i. < actualCount , i + + ) {
om ( " Sleeper " är lika med ( activeThreads [ i] getName ( ) ) . . ) {
hittade = activeThreads [ i] ;
break;
}
}
om ( hittade = null ) {
found.dumpStack ( ) ;
}
6
som sista rad i din main ( ) metoden , tala om för systemet att gå ur minnet :
System.exit ( 0 ) ,
7
Kompilera och köra ditt program . Medan radnummer i stackspårningen kan vara något annorlunda baserat på saker som parenteser stil , de alla borde ge samma generella utgång
java.lang.Exception : . Stackspårning
på java . lang.Thread.dumpStack ( Thread.java : 1206 ) katalog
på Find.main ( Find.java : 31 ) katalog