Red de conocimiento informático - Material del sitio web - Cómo finalizar correctamente un hilo de Java

Cómo finalizar correctamente un hilo de Java

1. Utilice el indicador de salida para que el hilo salga normalmente, es decir, el hilo termina cuando se completa el método de ejecución.

2. Utilice el método de detención para finalizar el hilo a la fuerza (este método no se recomienda porque detener, al igual que suspender y reanudar, también puede producir resultados impredecibles).

3. Utilice el método de interrupción para interrumpir el hilo.

1. Utilice el indicador de salida para finalizar el hilo.

Cuando se ejecuta el método de ejecución, el hilo saldrá. Pero a veces el método de ejecución nunca termina. Por ejemplo, utilice subprocesos en programas de servidor para monitorear las solicitudes de los clientes u otras tareas que requieran procesamiento cíclico. En este caso, estas tareas generalmente se colocan en un bucle, como un bucle while. Si desea que el bucle se ejecute para siempre, puede utilizar while(true){...} para manejarlo. Pero si desea que el bucle while salga bajo ciertas condiciones, la forma más directa es establecer un indicador de tipo booleano y establecer este indicador en verdadero o falso para controlar si el bucle while sale. A continuación se proporciona un ejemplo de cómo terminar un hilo usando el indicador de salida.

paquete capítulo2;

clase pública ThreadFlag extiende Thread

{

salida booleana volátil pública = false;

public void run()

{

mientras (!exit);

}

public static void main(String[] args) arroja una excepción

{

ThreadFlag thread = new ThreadFlag();

thread.start();

sleep(5000 ); // El hilo principal se retrasa durante 5 segundos

thread.exit = true; // Terminar el hilo del hilo

thread.join();

System. out .println("¡Salida del hilo!");

}

}

En el código anterior, se define un indicador de salida cuando la salida es verdadera. , El bucle while sale y el valor predeterminado de salida es falso. Al definir la salida, se utiliza una palabra clave Java volátil. El propósito de esta palabra clave es sincronizar la salida, lo que significa que solo un hilo puede modificar el valor de salida. al mismo tiempo.

2. Utilice el método stop para finalizar un hilo.

Utilice el método stop para finalizar por la fuerza un hilo en ejecución o suspendido. Podemos usar el siguiente código para terminar el hilo:

thread.stop();

Aunque el código anterior se puede usar para terminar el hilo, usar el método stop es muy peligroso , al igual que apagar repentinamente la computadora, en lugar de apagarla según el procedimiento normal, puede producir resultados impredecibles. Por lo tanto, no se recomienda utilizar el método de detención para finalizar el hilo.

3. Utilice el método de interrupción para terminar un hilo

El uso del método de interrupción para terminar un hilo se puede dividir en dos situaciones:

(1) El El hilo está en un estado bloqueado, como Se utiliza el método de suspensión.

(2) Utilice while(!isInterrupted()){...} para determinar si el hilo está interrumpido.

En el primer caso, usando el método de interrupción, el método de suspensión arrojará una excepción InterruptedException, mientras que en el segundo caso el hilo saldrá directamente. El siguiente código demuestra el uso del método de interrupción en el primer caso.

paquete capítulo2;

clase pública ThreadInterrupt extiende Thread

{

public void run()

{

prueba

{

sleep(50000); // Retraso 50 segundos

}

catch ( InterruptedException e)

{

System.out.println(e.getMessage());

}

}

public static void main(String[] args) arroja una excepción

{

Subproceso = new ThreadInterrupt();

thread.start( );

System.out.println("¡Presione cualquier tecla dentro de 50 segundos para interrumpir el hilo!");

System.in.read();

thread.interrupt();

thread.join();

System.out.println("¡El hilo ha salido!");

}

}

Los resultados del código anterior son los siguientes:

¡Presione cualquier tecla dentro de 50 segundos para interrumpir el hilo!

suspensión interrumpida

¡El hilo ha salido!

Después de llamar al método de interrupción, el método de suspensión genera una excepción y luego genera el mensaje de error: suspensión interrumpida.

Nota: En la clase Thread Hay dos formas de determinar si un hilo finaliza mediante el método de interrupción. Uno es el método estático interrumpido () y el otro es el método no estático isInterrupted (). La diferencia entre estos dos métodos es que interrumpido se usa para determinar si el hilo actual está interrumpido, mientras que isInterrupted se puede usar para determinar si. otros hilos se interrumpen. Por lo tanto, while (!isInterrupted()) también se puede reemplazar por while (!Thread.interrupted()).