Я немного путаюсь с поведением thread.isInterrupted
в приведенной ниже программе.Различное поведение при вызове thread.isInterrupted и печать результата
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!!!");
}
}
}
При выполнении вышеуказанной программы как таковой, он печатает,
Starting thread...Thread-0
Thread is interrupted!!!
Но когда я раскомментировать System.out
заявление для печати статуса прерывания, он работает в печати бесконечного цикла, «Текущий поток не прерывается "
Я не могу точно определить, что именно делает разница System.out
.
это неправильное, isInterrupted не очищает флаг. –
Да. Он очистит флаг –
@SivaKumar. Вы смешиваете 'прерванный()' с 'isInterrupted()'. Последний не очищает флаг. – assylias