2008-10-29 18 views
9

Estoy en el proceso de escribir un fragmento de código que se conecta a un servidor genera un montón de hilos usando esa conexión y hace un montón de "cosas".Detener un hilo en Java?

Hay ciertas instancias en las que la conexión falla y necesito detener todo y comenzar de cero con un nuevo objeto.

Quería limpiar después del objeto pero llamar a thread.stop en los hilos, pero este método es aparentemente obsoleto.

¿Cuál es la alternativa recomendada para hacer esto? ¿Debo escribir mi propio método de limpieza y salida para cada uno de los hilos? Establecer el hilo a nulo? ¿o algo mas?

Respuesta

1

Uso your_thread.interrupt y comprobar en su hilo si Thread.interrupted() devuelve true. Si es así, cierra el hilo correctamente.

3

Suponiendo que sus hilos están razonablemente bajo su control, es decir, no están llamando a nada que potencialmente va a esperar para siempre sin que se ejecute su código, lo cerraría con un simple (¡pero seguro de subprocesos - use volátil!) bandera.

Vea this article para ver un ejemplo en C# - el equivalente de Java debería ser fácil de resolver. Llamar al interrupt no tendrá ningún efecto hasta que el siguiente hilo espere y stop puede dejar su aplicación en un estado difícil de predecir. Siempre que sea posible, realice un cierre ordenado y limpio.

1

He usado this muy simple patrón de ejemplo. Parece que funciona y es fácil de entender e implementar.

1
private Thread m_CleanupThread = null; 

public void threadCleanUp(){ 
    m_CleanupThread = new Thread(this); 
    m_CleanupThread.Start(); 
} 

Este hilo terminará y el recolector de basura hará el resto.

Cuestiones relacionadas