Prova a togliere l'istruzione condizione = 0 nel metodo ferma() e vedrai che non basta chiamare interrupt() per femare il thread.
Se vuoi ti posto un esempio:
L'uscita da run e' determinato solo dalla variabile di controllo run.codice:import java.net.*; import java.io.*; public class Esempio extends Thread { private boolean run = true; private String msg = ""; private int i = 0; public void ferma() { run = false; } public void run() { try { while(run) { System.out.print(++i + " "); } } catch(Exception e) { System.out.println(e); } System.out.println("Esco da run"); } public static void main(String args[]) { Esempio e = new Esempio(); e.start(); new Controllo(e); } } class Controllo extends Thread { private Esempio esempio; Controllo(Esempio e) { esempio = e; start(); } public void run() { try { Thread.sleep(2000); } catch(Exception e) { System.out.println(e); } esempio.interrupt(); System.out.println("Chiamato interrupt"); if(esempio.isAlive()) System.out.println("Il thread e' ancora attivo"); try { Thread.sleep(5000); } catch(Exception e) { System.out.println(e); } esempio.ferma(); System.out.println("Chiamato ferma"); System.out.println("Esempio fermato"); } }
In realta' il metodo interrupt() si comporta in maniera analoga: imposta a true lo stato di una variabile interna, che puo' essere letta tramite i metodi interrupted() o isInterrupted().

Rispondi quotando