Многопоточность

В чем разница между interrupted() и isInterrupted()?


Метод `interrupted()` и метод `isInterrupted()` в Java используются для проверки состояния прерывания потока, но есть некоторые различия в их поведении. Метод `interrupted()` является статическим методом класса `Thread` . Он не только проверяет состояние прерывания текущего потока, но также сбрасывает флаг прерывания. Если флаг прерывания установлен, то метод `interrupted()` вернет `true` , а затем сбросит флаг прерывания, устанавливая его в `false` . Если флаг прерывания не установлен, то метод вернет `false` . Пример использования `interrupted()` : Thread.currentThread().interrupt(); boolean interrupted = Thread.interrupted(); System.out.println(interrupted); // Выводит true Метод `isInterrupted()` является нестатическим методом экземпляра класса `Thread` . Он проверяет состояние прерывания данного потока, но не сбрасывает флаг прерывания. Если флаг прерывания установлен, то метод `isInterrupted()` вернет `true` , иначе вернет `false` . Пример использования `isInterrupted()` : Thread.currentThread().interrupt(); boolean isInterrupted = Thread.currentThread().isInterrupted(); System.out.println(isInterrupted); // Выводит true Важно отметить, что метод `interrupted()` и метод `isInterrupted()` могут быть использованы для проверки состояния прерывания только внутри потока. Если вы хотите проверить состояние прерывания другого потока, вам следует использовать метод `isInterrupted()` для этого потока. Таким образом, основная разница между методом `interrupted()` и методом `isInterrupted()` заключается в том, что первый сбрасывает флаг прерывания, а второй - нет.


Копировать ссылку