Назад к вопросам
Middle
110
questionbank
В чем разница между методами interrupted() и isInterrupted() в Java?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
isInterrupted() проверяет, установлен ли у текущего потока флаг прерывания, не сбрасывая его.
interrupted() проверяет, установлен ли у текущего потока флаг прерывания, и сбрасывает его после проверки, если он был установлен. Этот метод является static.
Пример:
// Создаем поток
Thread t = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
// Выполняем полезную работу
}
System.out.println("Поток прерван.");
});
// Запускаем поток
t.start();
// Прерываем поток
t.interrupt();
// Проверяем состояние флага после interrupt() с isInterrupted()
System.out.println("isInterrupted() после interrupt(): " + t.isInterrupted()); // Должно быть true
try {
// Ждем завершения потока (в данном случае, он завершится быстро)
t.join();
} catch (InterruptedException e) {
// Восстанавливаем флаг прерывания, если join() был прерван
Thread.currentThread().interrupt();
}
// Проверяем состояние флага после interrupt() с interrupted() (из другого потока!)
// Внимание: Вызов interrupted() из другого потока не имеет смысла,
// так как interrupted() работает с флагом текущего выполняющегося потока.
// Для демонстрации работы interrupted() нужно вызвать его из самого прерванного потока.
// Пример вызова interrupted() внутри другого потока (не имеет отношения к флагу потока t)
System.out.println("interrupted() из текущего потока: " + Thread.interrupted()); // Должно быть false (если текущий поток не был прерван)
Ключевое различие:
| Метод | Флаг прерывания сбрасывается? | Тип метода |
|---|---|---|
isInterrupted() |
Нет | Экземпляра |
interrupted() |
Да | Статический |