Terminar un thread sin el método stop()
Artículo por Club Developers · 19 May 2006
3452 vistas
Veamos el esqueleto estándar de un thread. Este esqueleto permite parar un thread de forma sencilla sin usar el método 'deprecated' stop().
Otro posible esqueleto:
La anterior solución se adapta a los thread que efectuen regularmente el mismo proceso. Si el proceso es muy largo, puede ser necesario testear la consulta de final durante el transcurso del proceso. Lo más sencillo es levantar una excepción durante este proceso:
Atención: las llamadas al método testFin() tienen que hacerse únicamente cuando todos los objetos estén en un estado coherente.
java
/** Este booleano se usará para señalar al proceso si tiene que continuar o parar */ private boolean stopThread = false; public void run() { boolean fin = false; while( !fin ) { try { // proceso synchronized(this) { Thead.yield(); // lectura del booleano fin = this.stopThread; } } } } public synchronized void stop() { this.stopThread = true; }
Otro posible esqueleto:
La anterior solución se adapta a los thread que efectuen regularmente el mismo proceso. Si el proceso es muy largo, puede ser necesario testear la consulta de final durante el transcurso del proceso. Lo más sencillo es levantar una excepción durante este proceso:
java
private boolean stopThread = false; if( stopThread ) { } } public void run() { try { // proceso con una llamada regular a testFin(); } } public synchronized void stop() { this.stopThread = true; }
Atención: las llamadas al método testFin() tienen que hacerse únicamente cuando todos los objetos estén en un estado coherente.