Cómo cerrar el hilo de Java
1. Utilice el indicador de salida para que el hilo salga normalmente, es decir, el hilo finaliza una vez que 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, 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 complete 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 el programa del servidor para monitorear las solicitudes de los clientes u otras tareas que deban reciclarse. En este caso, estas tareas generalmente se colocan en un bucle, como un bucle while. Si desea que el ciclo se ejecute para siempre, puede usar while (true) {...} para manejarlo. Pero la forma más directa de hacer que el bucle while salga bajo ciertas condiciones es establecer un indicador booleano. Al establecer este indicador en verdadero o falso, puede controlar si el bucle while sale. A continuación se proporciona un ejemplo de cómo terminar un hilo con un indicador de salida.
Capítulo 2 de empaquetado;
La clase pública ThreadFlag extiende el hilo
{
salida booleana volátil pública = false;
Ejecución de vacío público()
{
mientras(!exit);
}
Vacío estático público principal (Cadena [ ] args) arroja una excepción
{
ThreadFlag thread = new ThreadFlag();
thread start();
Dormir. (5000); //El hilo principal se retrasa durante 5 segundos
thread.exit = true//Terminar el hilo
thread.join();
System.out. println("¡El hilo salió!");
}
}
En el código anterior, se define una salida de indicador. Cuando la salida es verdadera, el ciclo while se cierra y el valor predeterminado de salida es falso. Al definir la salida, se utiliza la 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 el 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 un hilo:
thread.stop().
Aunque usar el código anterior puede terminar el hilo, usar el método de detención 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 un hilo.
3. Utilice el método de interrupción para finalizar el hilo.
El uso del método de interrupción para finalizar el hilo se puede dividir en dos situaciones:
(1) El El hilo está en un estado bloqueado, como el uso del método de suspensión.
(2) Utilice while(!IsInterrupted()){...}) {...} para determinar si el hilo está interrumpido.
En el primer caso, utilice el método de interrupción. El método de suspensión arrojará InterruptedException. 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.
Capítulo 2 de empaquetado;
La clase pública ThreadInterrupt extiende el hilo
{
Public void run()
{
Prueba
{
Sleep(50000); //Retraso 50 segundos
}
catch (excepción de interrupción e)
{
system . println(e . getmessage()); /p>
Public static void main(String[] args) lanza una excepción
{
Subproceso = nueva interrupción del subproceso();
thread . start();
system . println("¡Presione cualquier tecla dentro de 50 segundos para interrumpir el hilo!"); /p >
hilo.interrupt().
thread.join();
System.out.println("¡El hilo ha salido!");
}
}
Los resultados del código anterior son los siguientes:
¡Presione cualquier tecla para interrumpir el hilo en 50 segundos!
Interrupción del sueño
¡El hilo ha cerrado!
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: Hay dos métodos en la clase Thread para determinar si el método de interrupción termina el hilo. 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 la línea actual está interrumpida, mientras que isInterrupted se puede usar para determinar si otros subprocesos están interrumpidos. Por lo tanto, while(!IsInterrupted()) también se puede cambiar a while(!Thread.interrupted()).