Thread.interrupt возвращает false - PullRequest
0 голосов
/ 30 марта 2020

Я пробовал приведенный ниже код, я прервал пользовательский поток, когда я печатаю значение isInterrupted, оно возвращает false, я не получил ни одного истинного значения, здесь флаг будет сброшен, когда исключение был перехвачен или вызвал прерванный метод.

Во-вторых, согласно моему пониманию, метод сна должен генерировать и interruptedException в каждой итерации значение в catch для печати, но оно выбрасывает только один раз.


class ThreadInterruptt extends Thread
{
    public void run()
    {

        for(int i = 0; i<100;i++)
        {
            try {
                Thread.sleep(1000);
                System.out.println(i);
                System.out.println(isInterrupted());
            } catch (InterruptedException e) {
                System.out.println("Thread Interrupted");
            }
        }
    }
}
public class ThreadInterrupt {
    public static void main(String ag[]) throws InterruptedException
    {
        ThreadInterruptt t = new ThreadInterruptt();
        t.start();
        Thread.sleep(100);
        t.interrupt();

    }

}

1 Ответ

5 голосов
/ 30 марта 2020

Вы бы никогда не добрались до проверки isInterrupted(), если вас прерывают: Thread.sleep() вызвало бы исключение, а также очищает прерванный статус потока , как описано в Javado * 1008. *.

И затем вы отбрасываете тот факт, что поток был прерван (поскольку вы не сбрасываете флаг прерывания при получении исключения), поэтому он не прерывается на следующей итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...