Kunsten å finne trådene under kjøring involverer to Java-klasser , tråd og ThreadGroup . I tillegg må du huske å nevne din tråd når du oppretter den . Ellers, hvis du ikke nevne din tråd , er du avhengig av standard navngiving mekanismen for tråder innebygd i Java , og mens du kan være i stand til å gjette hva tråden navnet skal være , er det ingen garanti for det vil være det samme navn på tvers alle runtime plattformer og Java- versjoner. Du trenger
Java Runtime Environment versjon 6 eller nyere
Vis flere instruksjoner
en
Lag rammene for et Java-program klasse som heter " Finn ". Bare gi en tom main ( )-metoden som utgangspunkt .
Public class Finn {
public static void main ( String args [ ] ) {
}
}
2
Lag et kjørbart objekt og tråd , slik at du har noe å finne. Navngi tråden " Sleeper " ved å gi en andre argumentet til tråden konstruktør , der det første argumentet er kjørbart referanse. Når du har opprettet tråden , starter du den ved å ringe sin start ( )-metoden . Følgende kode starter den tomme main ( )-metoden definisjon : en
kjørbart runner = ny kjørbart ( ) {
public void run () {
prøve {
Thread.sleep ( 50000 ) ;
} catch ( InterruptedException e ) {
//ignore
}
}
};
Thread t = new Thread ( runner " Sleeper ");
t.start ();
3
Finn tråden med hjelp av ThreadGroup . Alle trådene tilhører en ThreadGroup . Disse gruppene sitter i et tre hvor alle grupper har en forelder node (og barn noder ), bortsett fra roten av treet , som ikke har noen av foreldrene . Forutsatt tråden å finne er ikke i den aktuelle tråden er ThreadGroup , gå opp til toppen av treet ved å se på konsernspiss . På den måten når du går for å finne den " Sleeper " tråden, vet du at du har funnet det siden alle aktive tråder vil være barn av Overlord forelder tråden.
Thread currentThread = Thread.currentThread ( ) ;
ThreadGroup gruppe = currentThread.getThreadGroup ();
while ( group.getParent ( ) = null ) {
gruppe = group.getParent (); !
}
4
Bruk nummerere ( )-metoden for ThreadGroup å gruppere alle barn tråder av denne super forelder. Metoden lagrer de aktive trådene i en matrise
int activeCount = group.activeCount (); .
Thread activeThreads [ ] = new Thread [ activeCount 5 ];
int actualCount = group.enumerate ( activeThreads ), - " . Sleeper "
5
Bruk activeThreads array å bidra til å finne den savnede tråden her , den som er merket Når funnet , bruker dumpStack ()-metoden for å gi en stacktrace av tråden : en
Thread funnet = null;
for ( int i = 0 ; i < actualCount ; i + + ) {
if ( " Sleeper " likeverdige ( activeThreads [ i] getName ( ) ) . . ) {
funnet = activeThreads [i ];
pause,
< p > }
}
if ( funnet = null ! ) {
found.dumpStack ();
}
6 < p> Som den avsluttende linje i main ( )-metoden , forteller at systemet skal gå ut av minne : en
System.exit ( 0 ) ;
7
Kompiler og kjør programmet . Mens linjenummer i stakksporingen kan være litt annerledes basert på ting som parenteser stil, de alle bør gi den samme generelle utgang
java.lang.Exception : . Stack Trace
på java . lang.Thread.dumpStack ( Thread.java : 1206 )
på Find.main ( Find.java : 31 )