La reunión de hilo de Java termina en las siguientes tres maneras, y está en un estado de muerte después del final
1. run() o call() se ejecuta y el hilo termina normalmente;
2. El hilo arroja una excepción o error no capturado;
3. Llame directamente al método stop() del hilo para finalizar el hilo;
Nota: Cuando termina el hilo principal, otros hilos no se ven afectados de ninguna manera y no terminarán con él. Una vez que se inicia el hilo infantil, tiene el mismo estado que el hilo principal y no se verá afectado por el final del hilo principal.
Para probar si un hilo ha muerto, se puede llamar al método isAlive() del objeto de subproceso. Cuando el hilo está en los tres estados de listos, ejecutados y bloqueando, el método devolverá verdadero; Cuando el hilo está en el nuevo estado y el estado muerto, el método devolverá falso.
Las pruebas se realizan en 1 y 2 de situaciones de muerte de hilo de la siguiente manera.
El código del hilo principal es el siguiente:
public class Threadtest {public static void main (string [] args) lanza interruptedException {hilo t = nuevo hilo (new runTask ()); t.Start (); while (true) {thread.sleep (1000); System.out.println ("El estado principal: el estado del hilo infantil es" + t.isalive ()); }}}Prueba 1: Después de que el hilo termina normalmente, isalive () devuelve falso
Escriba el código de ejecución del hilo donde el hilo termina normalmente:
public class runTask implementa runnable {@Override public void run () {for (int idx = 1; idx <= 10; idx ++) {system.out.println ("Subthread: todavía estoy vivo"+idx); intente {Thread.sleep (3000); } catch (InterruptedException e) {E.PrintStackTrace (); }}}} Los resultados de salida de los dos subprocesos son los siguientes. Después de que se complete la ejecución normal del hilo infantil, el uso de Thread.isAlive() devolverá False.
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 hilo principal: el estado del hilo infantil es falso hilo principal: el estado del hilo infantil es falso hilo principal: el estado del hilo infantil es falso hilo principal: el estado del hilo infantil es falso hilo principal: el estado del hilo infantil es falso
Prueba 2: Después de que el hilo infantil lanza una excepción, el isalive del hilo () devuelve falso
Modifique el código del hilo infantil y agregue lanzamientos de excepción:
public class runTask implementa runnable {@Override public void run () {for (int idx = 1; idx <= 10; idx ++) {system.out.println ("Subthread: todavía estoy vivo"+idx); intente {Thread.sleep (3000); } catch (InterruptedException e) {E.PrintStackTrace (); } if (idx == 5) {Throw New RuntimeException ("I Am Die"); }}}}Ejecutar nuevamente y observar la salida:
Hilo principal: el estado de hilo infantil es verdadero hilo principal: el estado de hilo infantil es verdadero hilo principal: el estado de hilo infantil es verdadero sub-hilo: el estado de hilo infantil es verdadero sub-thread: el estado de hilo infantil es verdadero hilo principal: el estado de hilo infantil es verdadero sub-theting: el estado de hilo infantil es verdadero sub-thread: el estado de hilo infantil es verdadero hilo principal: el estado de hilo infantil es verdadero hilo principal: el estado de hilo infantil es verdadero hilo principal del hilo infantil: el estado de hilo principal es verdadero hilo principal: hilo infantil: hilo infantil es verdadero hilo principal. Estoy muerto en runtask.run (runtask.java:15) en java.lang.thread.run (hild.java:662) hilo principal: el estado de hilo infantil es falso hilo principal: el estado de hilo infantil es falso hilo principal: el estado de hilo infantil es falso
Se puede ver que después de que se lanza la excepción, el hilo del niño termina directamente y se convierte en el estado de flase;
Resumir
Después de que el hilo termina normalmente, o el hilo arroja una excepción no captura, el hilo se muere y la función isalive () devuelve falso. De acuerdo, lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo sea de ayuda para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse.