Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza Informatica >> Programmazione >> Java Programming >> .

Come trovare un thread Java a runtime

L' arte di trovare le discussioni in fase di esecuzione coinvolge due classi Java , filo e ThreadGroup . Inoltre , è necessario ricordarsi di assegnare un nome al thread quando lo si crea . In caso contrario , se non chiami il tuo thread , si fa affidamento sul meccanismo di denominazione predefinito per le discussioni costruite in Java , e mentre si può essere in grado di indovinare ciò che il nome del thread dovrebbe essere, non vi è alcuna garanzia che sarà lo stesso nome di tutta tutte le piattaforme e le versioni runtime Java. Cose che ti serviranno
Java Runtime Environment versione 6 o superiore
Show More Istruzioni
1

creare il quadro di una classe di un'applicazione Java denominata "Trova ". Basta fornire un metodo vuoto main () come punto di partenza .

Public class Trova {

void main ( args String [ ] ) { public static

}

}
2

Creare un oggetto Runnable e discussione in modo da avere qualcosa da trovare . Nome del filo " Sleeper " , fornendo un secondo parametro al costruttore Thread, dove il primo argomento è il riferimento Runnable . Dopo aver creato la discussione , avviarlo chiamando il metodo start ( ) . Il codice seguente inizia l'ormai vuota metodo main () Definizione :

corridore Runnable = new Runnable ( ) {

public void run ( ) { try {


Thread.sleep ( 50000 ) ;

} catch ( InterruptedException e) {

//ignora

}

}

} ;

Discussione t = new Thread ( corridore , " Sleeper ");

T.Inizio ();
3

trovare il filo con l'aiuto di ThreadGroup . Tutte le discussioni appartengono a un ThreadGroup . Questi gruppi di sedersi in un albero in cui tutti i gruppi hanno un nodo padre ( e nodi figli ) , fatta eccezione per la radice dell'albero , che non ha genitore . Supponendo che il filo di trovare non è in ThreadGroup del thread corrente , a piedi fino alla cima dell'albero , cercando in madre del gruppo . In questo modo, quando si va a trovare il filo " Sleeper " , saprete che avete trovato da tutte le discussioni attive saranno figli del thread padre signore .

CurrentThread Discussione Thread.currentThread = ( ) ;

gruppo ThreadGroup = currentThread.getThreadGroup ();

mentre ( group.getParent ( ) = null) {
gruppo

= group.getParent ( ) ; !

}
4

Utilizzare il metodo di ThreadGroup per raggruppare tutti i bambini le discussioni di questo genitore Super enumerate ( ) . Il metodo memorizza i thread attivi in un array

int activeCount = group.activeCount ( ) .

ActiveThreads discussione [ ] = new Thread [ activeCount 5 ] ;

int actualCount = group.enumerate ( activeThreads ) , - " . Sleeper "
5

utilizzare la matrice activeThreads per aiutare a trovare il filo manca qui , quello segnato Una volta trovato, utilizzare il dumpStack () per fornire una stacktrace del thread :

Discussione trovato = null;

for (int i = 0; i < actualCount ; i + + ) {

se ( " Sleeper " equals ( activeThreads [ i] getName () ) . . ) {

trovato = activeThreads [ i] ;

pausa ;

} }


if ( trovato = null ) {

found.dumpStack (); }


6

Come la linea di chiusura per il metodo main () , indicare al sistema per uscire dalla memoria :

System.exit ( 0 ) ;
7

compilare ed eseguire il programma . Mentre i numeri di riga nella traccia dello stack potrebbe essere leggermente diverso in base al le cose come stile di parentesi , tutti dovrebbero fornire lo stesso rendimento generale

java.lang.Exception : . Stack trace

in java . lang.Thread.dumpStack ( Thread.java : 1206 ) per

a Find.main ( Find.java : 31 ) economici

 

Programmazione © www.354353.com