renderThread.interrupt() non interrompe il filo, si continua correre.
- Se il thread sta eseguendo e
interrupt()
viene richiamato è stato di interrupt è impostato.
- Se questa discussione è bloccato in un'invocazione uno dei
wait
metodi della classe Object, o dei Thread.join
e Thread.sleep
metodi di questa classe quindi allo stato interrupt vengono annullati e riceverà un InterruptedException
.
Ad esempio:
Thread t = new Thread()
{
public void run()
{
try {
for(int i=0; i<10000;i++)
System.out.println("Is interrupTed? "+this.isInterrupted());
Thread.sleep(200);
} catch (InterruptedException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
}
}
};
t.start();
t.interrupt();
}
Il codice sopra, ho usato un ciclo for
per intercettare la bandiera interrput con isInterrupted()
funzione e stampato esso. Se viene invocato t.interrupt()
, isInterrupted()
restituirà true
che verrà visualizzato nella console. Non appena raggiunge lo Thread.sleep(miliTime)
vedrai che è stato catturato lo InterruptedException
che è stato lanciato come descritto sopra.
Arresto del filo:
si potrebbe fare uso di questo controllo isInterrupted()
flag se un interrupt()
stato richiamato su di esso e restituire dall'esecuzione:
Ad esempio:
Thread t = new Thread()
{
public void run()
{
long executeTime = System.currentTimeMillis() ;
int i = 0;
for(; i<10000 && !this.isInterrupted();i++)
System.out.println("Is interrupted? "+this.isInterrupted());
System.out.println("Was Interrupted? "+this.isInterrupted()
+" after cycle: "+ i);
System.out.println("Time it gets Executed: "
+(System.currentTimeMillis() - executeTime+" ms"));
}
};
t.start();
try {
Thread.sleep(200);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
t.interrupt();
Durante l'esecuzione del codice precedente: ho inviato il thread principale in modalità sospensione per 200
all'interno dello statico funzione principale per consentire al thread avviato t
di funzionare per un po 'di tempo. Poi Invocai
t.interrupt()
su esso pertanto il ciclo for
di fermarsi e stampare un'uscita come segue:
Was Interrupted? true after cycle: 1477
Time it gets Executed: 258 ms
che indica che il ciclo for
ha 1148
iterazione prima t.interrupt();
stato richiamato nella funzione main
.
Leggere la documentazione della funzione Thread.interrupt()
per ulteriori dettagli.
Perché pensi che chiamare "interrupt" dovrebbe _stop_ il thread? –
possibile duplicato di [Come arrestare correttamente la discussione in Java] (http://stackoverflow.com/questions/10961714/how-to-properly-stop-the-thread-in-java) –
@SotiriosDelimanolis Perché, colloquialmente, "interrompere qualcosa" e "fermare qualcosa" sono sinonimi .. Non dico che è ciò che fa * (e la documentazione è un buon punto di partenza per srotolare l'assunto), ma il nome è caricato. – user2864740