ezio1400 ha scritto:
Sarò breve. Ho scritto un semplice programma costituito da 2 thread ( compreso il thread main ). Il mio obiettivo è quello di terminare il secondo thread dopo un certo periodo di tempo. Essendo il metodo stop deprecato ho utilizzato il metodo interrupt , il problema è che il thread continua ad compiere attività mentre se utilizzo il metodo stop il thread termina correttamente come da obbiettivo. Perchè?
stop(), suspend() e alcuni altri sono deprecati ormai da molto tempo e per motivi ben precisi (info
qui).
La terminazione dei thread deve essere fatta in modo "cooperativo", nel senso che il codice del thread deve cooperare in modo che ci sia l'opportunità di terminarlo ma nei tempi e modi appropriati per il lavoro che sta svolgendo.
interrupt() di per sé non interrompe un bel niente ... setta solo un flag della interruzione e basta. Se il lavoro del thread è fatto solo di computazioni, cicli, calcoli, ecc... non succede proprio nulla.
Dovrebbe essere appunto il codice del thread a cooperare andando di tanto in tanto a verificare se è stato interrotto e se sì, ha la facoltà di terminare facendo in modo da chiudere/rilasciare perlomeno correttamente ciò che stava facendo/usando.
Se invece il thread è bloccato in una qualche operazione "bloccante" (es. una wait() ) allora la JVM è in grado di reagire. Vedi la documentazione di interrupt() che spiega chiaramente quali sono questi casi.