В Java существуют два метода для работы с прерыванием потоков: interrupted() и isInterrupted(). Вот их различия:
interrupted(): Это статический метод класса Thread, который проверяет, был ли текущий поток прерван, и сбрасывает флаг прерывания. Если метод возвращает true, это означает, что на текущий поток был вызван метод interrupt() и флаг прерывания был установлен. После возвращения true, флаг прерывания сбрасывается, чтобы следующий вызов interrupted() вернул false. Если метод возвращает false, это может означать, что либо поток не был прерван, либо флаг прерывания уже был сброшен.
isInterrupted(): Это метод экземпляра класса Thread, который проверяет, был ли текущий поток прерван, но не изменяет флаг прерывания. Он возвращает true, если флаг прерывания установлен, и false, если флаг прерывания не установлен. Вызов isInterrupted() не сбрасывает флаг прерывания, поэтому последующие вызовы будут возвращать тот же результат.
Важно отметить, что interrupted() является статическим методом, вызываемым на классе Thread, а isInterrupted() является методом объекта потока.
Пример использования:
Thread thread = new Thread(() -> {
while (!Thread.interrupted()) {
// Выполнение работы }
});
// Прерывание потока
thread.interrupt();
// Проверка флага прерывания
boolean interrupted = Thread.interrupted(); // Возвращает true и сбрасывает флаг прерывания
boolean isInterrupted = thread.isInterrupted(); // Возвращает true без изменения флага прерывания
В общем случае, isInterrupted() обычно предпочтительнее, так как он не изменяет состояние флага прерывания, позволяя более точно контролировать работу потока. Однако, выбор между ними зависит от конкретных требований вашего кода и контекста использования.
1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions
Tелеграмм канал: https://t.me/DEBAGanov
Мое резюме: https://github.com/DEBAGanov