Sono stato alla ricerca di modi per uccidere un filo e sembra questo è l'approccio più popolareMetodo alternativo per uccidere filo
public class UsingFlagToShutdownThread extends Thread {
private boolean running = true;
public void run() {
while (running) {
System.out.print(".");
System.out.flush();
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {}
}
System.out.println("Shutting down thread");
}
public void shutdown() {
running = false;
}
public static void main(String[] args)
throws InterruptedException {
UsingFlagToShutdownThread t = new UsingFlagToShutdownThread();
t.start();
Thread.sleep(5000);
t.shutdown();
}
}
Tuttavia, se nel ciclo mentre noi Spawn un altro un altro oggetto che viene popolata con dati (diciamo una gui che è in esecuzione e in aggiornamento), quindi come richiamiamo - specialmente considerando che questo metodo potrebbe essere stato chiamato più volte quindi abbiamo molti thread con while (in esecuzione), quindi cambiando il flag per uno lo cambierebbe per tutti?
grazie
** Nessun una soluzione, ma una best practice: ** dichiarare la vostra bandiera 'running' come' volatile'. –
L'approccio migliore all'uccisione di thread è non provare. Se esiste un modo in cui è possibile progettare un'applicazione in modo che i thread non debbano essere uccisi fino a quando il sistema operativo non li uccide al termine del processo, è necessario farlo esattamente. –
ma se il metodo di esecuzione ha come ciclo infinito, anche se si chiude il gui il thread sta pompando dati in, non morirà ancora :( – Biscuit128