L' art de trouver les discussions à l'exécution implique deux classes Java , le fil et ThreadGroup . En outre, vous ne devez pas oublier de nommer votre fils quand vous le créez. Sinon, si vous ne nommez pas votre sujet, vous êtes en s'appuyant sur le mécanisme de nommage par défaut pour les threads intégrés dans Java, et alors que vous pourriez être en mesure de deviner ce que le nom de fil devrait être, il n'ya aucune garantie que ce sera le même nom partout toutes les plates-formes d'exécution et les versions de Java . Choses que vous devez
Java Runtime Environment version 6 ou supérieure
Afficher plus Instructions
1
Créer le cadre d'une classe d'application Java nommée « Rechercher». Il suffit de fournir une méthode vide main () comme point de départ .
Classe public
Trouver {
static void Main ( String args []) { publiques
}
}
2
Créer un objet Runnable et de fils de sorte que vous avez quelque chose à trouver. Nommez le fil " Sleeper " en fournissant un second argument du constructeur de Thread, où le premier argument est la référence Runnable . Après la création de la discussion , lancez-le en appelant sa méthode start () . Le code suivant démarre la définition de la méthode maintenant vide main () :
coureur Runnable = new Runnable () {
public void run () {
try {
Thread.sleep (50000) ;
} catch ( InterruptedException e) {
//ignorer
}
} < br >
};
fil t = new Thread ( coureur, " Sleeper ");
t.start ();
3
Trouvez le fil à l'aide de ThreadGroup . Tous les fils appartiennent à une ThreadGroup . Ces groupes de s'asseoir dans une arborescence dans laquelle tous les groupes ont un noeud parent ( et noeuds enfants ) , à l'exception de la racine de l'arbre , ce qui n'a pas de parent . En supposant que le fil pour trouver n'est pas dans l' ThreadGroup du thread courant , montez au sommet de l'arbre en regardant la mère du groupe . De cette façon, quand vous allez à trouver le fil " Sleeper " , vous saurez que vous avez trouvé depuis toutes les discussions actives seront les enfants du thread parent suzerain .
CurrentThread du filetage = de Thread.currentThread ( ) ;
groupe ThreadGroup = currentThread.getThreadGroup ();
while ( group.getParent () = null) { groupe de
= group.getParent (); !
}
4
Utilisez la méthode de ThreadGroup de regrouper tous les enfants fils de cette super- parent enumerate (). La méthode stocke les threads actifs dans un tableau
int ActiveCount = group.activeCount (); .
ActiveThreads de la discussion [] = new Thread [ ActiveCount +5] ;
int actualCount = group.enumerate ( activeThreads ) ; - " . Sleeper "
5
Utilisez le tableau activeThreads pour aider à trouver le fil qui manque ici , celui marqué Une fois trouvé , utilisez le DumpStack () pour fournir une stacktrace du fil :
discussion trouvées = null;
for (int i = 0; i < actualCount ; i + +) {
if (" Sleeper " equals ( activeThreads [i] getName ()). . ) {
trouvées = activeThreads [i] ; pause
;
< p >} }
if ( trouvé = null ! ) {
found.dumpStack (); }
6 < p> Comme la ligne de fermeture de votre méthode main () , dites le système pour sortir de la mémoire :
System.exit (0);
7
compiler et exécuter votre programme . Alors que les numéros de ligne dans la trace de la pile pourrait être légèrement différent en fonction de choses comme entre parenthèses style, ils doivent tous fournir le même rendement général
java.lang.Exception : . Stack trace
à Java . lang.Thread.dumpStack ( Thread.java : 1206)
à Find.main ( Find.java : 31)