Originariamente inviato da AspxTM
come devo fare per farlo terminare correttamente?
grazie
Ci sono due cose da fare:

1) Assicurarsi che i thread in wait vengano risvegliati, chiamando un notifyAll() quando le condizioni per la prosecuzione sono valide.

2) Fare in modo che il thread sia collaborativo: evita i cicli volutamente infiniti ( while(true) ), sostituendoli con dei cicli monitorati (quindi, con una guardia data da una variabile booleana); aggiungi al thread un metodo che consenta di cambiare la condizione di elaborazione:

codice:
boolean continuaElaborazione = true;
...
while( continuaElaborazione ) {
   ...
}
...
public void ferma() {
   continuaElaborazione = false;
}
In questo modo, quando non sarà più necessaria l'elaborazione da parte del thread, invocherai il metodo ferma() sul thread stesso ed il prossimo notifyAll() farà il suo dovere.

PS: il thread non dovrebbe mettersi in wait() da solo, ma dovrebbe essere messo in wait() da qualcun'altro che avrà poi la facoltà di invocare un notify()/notifyAll() per risvegliare il/i thread.


Ciao.