2010-06-28 10 views

Respuesta

12

Puede pedir el hilo para interrumpir, llamando Thread.interrupt()

Tenga en cuenta que existen algunos otros métodos con una semántica similar - stop() y destroy() - pero son obsoleta , porque son unsafe. No tengas la tentación de usarlos.

+1

. destroy() no está privado. – JavaUser

+1

Consulte el enlace "inseguro" de Bozho, en particular la sección "¿Qué debo usar en lugar de Thread.stop()", para ver la forma canónica de reall * kill * un hilo? Interrumpir simplemente hará que las llamadas de bloqueo actualmente en ejecución dejen de ejecutarse, pero por sí mismas no impedirá que se ejecute el hilo. –

+2

@JavaUser es, a partir de Java 1.5 – Bozho

6

Como dijo Bozho, Thread.interrupt() es la forma genérica y correcta de hacerlo. Pero recuerda que requiere que el hilo coopere; Es muy fácil implementar un hilo que ignora las solicitudes de interrupción.

Para que un fragmento de código sea interrumpible de esta manera, no debe ignorar ninguna InterruptedException, y debe verificar el indicador de interrupción en cada iteración de bucle (utilizando Thread.currentThread(). IsInterrupted()). Además, no debería tener ninguna operación de bloqueo no interrumpible. Si tales operaciones existen (por ejemplo, esperar en un socket), entonces necesitará una implementación de interrupción más específica (por ejemplo, cerrar el socket).

Cuestiones relacionadas