Метод isInterrupted
Метод isInterrupted класса Thread проверяет,
установлен ли у потока флаг прерывания. Метод возвращает
true, если поток был прерван, и false в противном
случае. В отличие от статического метода interrupted,
данный метод вызывается у конкретного объекта потока и
не сбрасывает флаг прерывания после проверки. Параметров
метод не принимает.
Синтаксис
thread.isInterrupted()
Пример
Давайте создадим поток, прервём его и проверим состояние флага прерывания:
public class Main
{
public static void main(String[] args) throws InterruptedException
{
Thread thread = new Thread(() -> {
while (true)
{
if (Thread.currentThread().isInterrupted())
{
System.out.println("Thread was interrupted");
return;
}
}
});
thread.start();
thread.interrupt();
Thread.sleep(100);
System.out.println(thread.isInterrupted());
}
}
Результат выполнения кода:
"Thread was interrupted"
true
Пример
Давайте проверим, что метод isInterrupted не сбрасывает
флаг прерывания, в отличие от метода interrupted:
public class Main
{
public static void main(String[] args) throws InterruptedException
{
Thread thread = new Thread(() -> {
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
// handle interruption
}
});
thread.start();
thread.interrupt();
Thread.sleep(100);
boolean res1 = thread.isInterrupted();
boolean res2 = thread.isInterrupted();
System.out.println(res1);
System.out.println(res2);
}
}
Результат выполнения кода:
false
false
Оба вызова вернули false, так как блок catch
поглотил исключение и сбросил флаг прерывания. Чтобы
проверить флаг до обработки исключения, нужно вызывать
isInterrupted внутри цикла или до блокирующей операции.