Ci sono due cose da fare:Originariamente inviato da AspxTM
come devo fare per farlo terminare correttamente?
grazie
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:
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.codice:boolean continuaElaborazione = true; ... while( continuaElaborazione ) { ... } ... public void ferma() { continuaElaborazione = false; }
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.![]()