A reunião de Threading Java termina nas três maneiras seguintes, e está em estado de morte após o fim
1. run() ou call() é executado e o encadeamento termina normalmente;
2. O thread lança uma exceção ou erro não capturado;
3. Chame diretamente o método stop() do thread para encerrar o thread;
Nota: Quando o encadeamento principal termina, outros threads não são afetados de forma alguma e não terminam com ele. Depois que o thread infantil for iniciado, ele tem o mesmo status do encadeamento principal e não será afetado no final do encadeamento principal.
Para testar se um thread morreu, o método isAlive() do objeto Thread pode ser chamado. Quando o tópico estiver nos três estados de Ready, Running e Blocking, o método retornará verdadeiro; Quando o tópico estiver no novo estado e estado morto, o método retornará falso.
Os testes são realizados em 1 e 2 de situações de morte por threads da seguinte forma.
O código do tópico principal é o seguinte:
classe pública threadtest {public static void main (string [] args) lança interruptEdException {thread t = new Thread (new RunTask ()); t.start (); while (true) {thread.sleep (1000); System.out.println ("Tópico principal: o status do thread da criança é" + t.isalive ()); }}}Teste 1: Depois que o tópico termina normalmente, o isalive () retorna false
Escreva o código de execução do thread, onde o thread termina normalmente:
public class RuNundSk implementa Runnable {@Override public void run () {for (int idx = 1; idx <= 10; idx ++) {System.out.println ("subthRead: ainda estou vivo"+idx); tente {thread.sleep (3000); } catch (interruptedException e) {e.printStackTrace (); }}}} Os resultados da saída dos dois threads são os seguintes. Após a conclusão da execução normal do encadeamento filho, o uso Thread.isAlive() retornará falso.
Main thread: child thread state is true Main thread: child thread state is true Sub-thread: I am still alive 8 Main thread: child thread state is true Main thread: child thread state is true Main thread: child thread state is true Sub-thread: child thread state is true Main thread: child thread state is true Main thread: child thread state is true Main thread: child thread state is true Main thread: child thread state is true Main thread: child thread state is true Main thread: child thread state is true Main thread: child thread state is false Main thread: child thread state is false Main thread: child thread state is false Main thread: child thread state is false Main thread: child thread state is false Main thread: child thread state is false Main thread: child thread state is false Main thread: child thread state is false Main thread: child thread state is false Main thread: child thread state is false Main thread: child thread state is false Main thread: child thread state is false Main thread: child thread state is false Main thread: child thread state is false Main thread: child thread state is false Main thread: child thread state is FALSO PRINCIPAL DOS PRINCIPAIS: O estado do tópico da criança é FALSE PRINCIPAL LINHO PRINCIPAL: FILHO DO FILHO ESTADO É FALSO PRINCIPAL PRINCIPAL: FILHO DO FILHO ESTADO É FALSO PRINCIPAL LINHO PRINCIPAL: FILHO DE FILHO IS FALSO PRINCIPAL PRINCIPAL: O estado do tópico infantil é falso
Teste 2: Depois que o tópico infantil lança uma exceção, o Isalive () do Thread retorna
Modifique o código do thread infantil e adicione os arremessos de exceção:
public class RuNundSk implementa Runnable {@Override public void run () {for (int idx = 1; idx <= 10; idx ++) {System.out.println ("subthRead: ainda estou vivo"+idx); tente {thread.sleep (3000); } catch (interruptedException e) {e.printStackTrace (); } if (idx == 5) {lança nova run timeException ("eu sou die"); }}}}Execute novamente e observe a saída:
Principal Principal: O estado do fio da criança é verdadeiro fio principal: o estado do encadeamento da criança é verdadeiro fio principal: o estado do fio da criança é verdadeiro sub-thread: o estado do fio da criança é verdadeiro sub-thread: o estado do fio da criança é verdadeiro encadeamento principal: encadeamento infantil thread é verdadeiro thread: thread infantil shread é verdadeiro estado true sub-thread: thread thread é verdadeiro thread is main thread thread shread is main: verdadeiro estado é verdadeiro é o verdadeiro thread. Am Die em RunTask.run (Runtask.java:15) em java.lang.thread.run (thread.java:662) Principal Tópico: Estado da criança Estado é falsa Tópico principal: Estado da criança Estado é falso Frea principal: o estado do fio Child é falso é falso
Pode -se observar que, após a exceção ser lançada, o fio infantil termina diretamente e se torna o estado da flase;
Resumir
Depois que o thread termina normalmente, ou o thread joga uma exceção não capturada, o thread fica morto e a função isalive () retorna falsa. Ok, o acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo seja de ajuda para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar.