"Ciao, Amigo! Ecco una domanda interessante che hai già avuto o lo farai presto. Come interrompi un thread in esecuzione? "
Diciamo che l'utente dice al programma di «scaricare un file da Internet». Il thread principale crea un thread figlio separato per questo processo e gli passa un oggetto il cui metodo run contiene tutte le azioni necessarie per scaricare il file.
Ma improvvisamente l'utente cambia idea. Non vuole scaricare il file. Come annulliamo un lavoro e interrompiamo il thread?
"Sì, dimmi come?"
" Non possiamo. Questa è la risposta più comune e più corretta. Non puoi fermare un filo. Solo esso può fermarsi da solo. "
Ma puoi inviare un segnale a un thread, dicendogli in qualche modo che il lavoro non deve più essere eseguito e che dovrebbe terminare. Proprio come il thread principale termina restituendo dal metodo main, un thread figlio termina restituendo dal metodo run.
"Qual è il modo migliore per farlo?"
"Puoi aggiungere qualche variabile, come un boolean . Se è true , il thread viene eseguito. Se è false , il thread dovrebbe terminare. In questo modo, ad esempio:"
Codice | Descrizione |
---|---|
|
La classe Clock scrive «Tick» sulla console una volta al secondo per sempre Se ClockManager.isClockRun è false, il metodo run termina. |
|
Il thread principale avvia un thread figlio (orologio) che dovrebbe essere eseguito per sempre
Attendere 10 secondi e dare all'orologio un segnale per terminare. Il thread principale completa il suo lavoro. Il filo dell'orologio termina il suo lavoro. |
"E se abbiamo diversi thread, allora cosa?"
"È meglio avere una tale variabile per ogni thread. È più conveniente aggiungerla direttamente alla classe. Potresti aggiungere una variabile booleana isRun lì. Tuttavia, è meglio aggiungere una variabile booleana isCancel che diventa vera se l'attività è annullato."
Codice | Descrizione |
---|---|
|
La classe Clock scrive la parola «Tick» nella console una volta al secondo finché isCancel è false.
Quando isCancel diventa true, il metodo run termina. |
|
Il thread principale avvia un thread figlio (orologio) che dovrebbe essere eseguito per sempre
Attendi 10 secondi e annulla l'attività chiamando il metodo cancel. Il thread principale completa il suo lavoro. Il filo dell'orologio termina il suo lavoro. |
"Lo terrò a mente. Grazie, Ellie."
GO TO FULL VERSION