Sono un po 'confuso con il comportamento di thread.isInterrupted
nel programma di seguito.Comportamento diverso quando si chiama thread.isInterrupted e stampa il risultato
public class ThreadPractice {
public static void main(String args[]) throws InterruptedException {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
System.out.println("Starting thread..." + Thread.currentThread().getName());
Thread.sleep(10000);
System.out.println("Waking up");
}catch(InterruptedException e){
System.out.println("Thread is interrupted!!!");
Thread.currentThread().interrupt();
}
}
});
t.start();
Thread.sleep(2000);
t.interrupt();
//System.out.println(!t.isInterrupted());
while(!t.isInterrupted()){
System.out.println("Current thread not interrupted!!!");
}
}
}
Quando si esegue il programma di cui sopra in quanto tale, esso stampa,
Starting thread...Thread-0
Thread is interrupted!!!
Ma quando ho rimuovere il commento la dichiarazione System.out
per stampare lo stato di interruzione, si imbatte in una stampa di ciclo infinito "thread corrente non interrotto "
Non riesco a capire esattamente che differenza fa l'affermazione System.out
.
questo non è giusto, isInterrupted non cancella la bandiera. –
Sì. Cancella la bandiera –
@SivaKumar Stai mixando 'interrupted()' con 'isInterrupted()'. Quest'ultimo non cancella la bandiera. – assylias