A arte de encontrar tópicos em tempo de execução envolve duas classes Java , linha e ThreadGroup . Além disso, você deve se lembrar de citar seu segmento ao criá-lo . Caso contrário, se você não nomear o seu fio, você está contando com o mecanismo de nomenclatura padrão para tópicos construídos em Java, e enquanto você pode ser capaz de adivinhar o que o nome do thread deve ser, não há nenhuma garantia de que vai ser o mesmo nome em todas as plataformas de tempo de execução e versões de Java. Coisas que você precisa
Java Runtime Environment versão 6 ou superior
Show Mais instruções
1
Crie a estrutura para uma classe de aplicativo Java chamado "Find ". Basta fornecer um método main vazio () como o ponto de partida.
Public class Pesquisa {
public static void main ( String args [] ) { }
}
2
Crie um objeto Runnable e rosca de modo que você tem algo a descobrir . Nomeie o thread " Sleeper " , proporcionando um segundo argumento para o construtor Thread, onde o primeiro argumento é a referência Runnable . Depois de criar o Thread, iniciá-lo chamando o método start () . O código a seguir começa a definição do método main () agora vazio :
corredor Runnable = new Runnable () {
public void run () { try {
Thread.sleep ( 50000 );
} catch ( InterruptedException e) {
//ignorar
}
} < br >
};
Passe t = new thread ( corredor, " Sleeper ");
t.start ();
3
encontrar o fio com a ajuda de ThreadGroup . Todos os tópicos pertencem a uma ThreadGroup . Esses grupos se sentar em uma árvore onde todos os grupos possuem um nó pai (e nós filhos ), exceto para a raiz da árvore , que não tem pai. Assumindo que a linha para encontrar não está na ThreadGroup do segmento atual , caminhar até o topo da árvore , olhando para pai do grupo. Dessa forma, quando você vai para encontrar o fio " Sleeper " , você vai saber que você encontrou-o desde os tópicos ativos serão filhos do segmento pai suserano .
Tópico currentThread = Thread.currentThread ( );
ThreadGroup grupo = currentThread.getThreadGroup ();
while ( group.getParent () = null) {
grupo = group.getParent (); !
}
4
Use o enumerate ( método ) de ThreadGroup para agrupar todas as crianças tópicos deste pais super. O método armazena os tópicos ativos em uma matriz
int activeCount = group.activeCount (); .
ActiveThreads Tópico [] = new Thread [ activeCount 5 ];
int actualCount = group.enumerate ( activeThreads );
5
Use a matriz activeThreads para ajudar a encontrar o fio que faltava - aqui , a um marcado " Sleeper ". Uma vez encontrado , use o método () para fornecer um stacktrace do fio DumpStack :
Tópico encontrado = null;
for (int i = 0; i < actualCount ; i + +) {
if ( " Sleeper " é igual a ( activeThreads [i] getName ()). . ) {
encontrado = activeThreads [i] ;
break;
} }
if ( encontrado = null !) {
found.dumpStack (); }
6
Como a linha de fechamento para o método main (), dizer ao sistema para sair da memória :
System.exit (0);
7
Compilar e executar o programa . Enquanto os números de linha no rastreamento de pilha pode ser um pouco diferente com base em coisas como estilo parênteses , todos eles devem fornecer o mesmo resultado geral
java.lang.Exception : . Rastreamento de pilha
em java . lang.Thread.dumpStack ( Thread.java 1206 )
em Find.main ( Find.java : 31)