Метод interrupt
Метод interrupt прерывает выполнение потока.
Когда поток находится в состоянии ожидания
(например, в методах sleep, wait или join),
он немедленно пробуждается и получает исключение
InterruptedException. Если поток не находится в ожидании,
то просто устанавливается флаг прерывания, который можно
проверить с помощью методов isInterrupted или
Thread.interrupted. Метод не принимает параметров
и не возвращает значения.
Синтаксис
thread.interrupt()
Пример
Давайте создадим поток, который спит 10 секунд,
и прервем его через 2 секунды:
public class Main
{
public static void main(String[] args)
{
Thread thread = new Thread(() -> {
try
{
Thread.sleep(10000);
System.out.println("Thread finished");
}
catch (InterruptedException e)
{
System.out.println("Thread was interrupted");
}
});
thread.start();
try
{
Thread.sleep(2000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
thread.interrupt();
}
}
Результат выполнения кода:
"Thread was interrupted"
Пример
Давайте проверим флаг прерывания у потока, который не находится в состоянии ожидания:
public class Main
{
public static void main(String[] args)
{
Thread thread = new Thread(() -> {
while (!Thread.currentThread().isInterrupted())
{
System.out.println("Working...");
}
System.out.println("Thread stopped");
});
thread.start();
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
thread.interrupt();
}
}
Результат выполнения кода:
"Working..."
"Working..."
"Working..."
"Thread stopped"
Смотрите также
-
метод
isInterrupted,
который проверяет флаг прерывания -
метод
sleep,
который приостанавливает поток -
метод
join,
который ожидает завершения потока -
класс
Thread,
который представляет поток выполнения