M-BOSS

Расскажите мне про методы .interrupt(), .interrupted(), ,isInterrupted()?


Методы .interrupt(), .interrupted() и .isInterrupted() связаны с механизмом прерывания потоков в Java. Давайте рассмотрим каждый из них подробнее: 1) .interrupt(): Этот метод вызывается на объекте потока и используется для прерывания выполнения потока. Когда вызывается метод .interrupt(), флаг прерывания потока устанавливается в значение true. Однако сам поток не останавливается автоматически. Вместо этого, это предоставляет возможность потоку проверить свой флаг прерывания и принять соответствующие действия. Например, поток может завершить свою работу и выйти из цикла или метода. 2) .interrupted(): Этот метод является статическим методом класса Thread и возвращает значение типа boolean. Он используется для проверки флага прерывания текущего потока. Если флаг прерывания установлен в значение true, то метод .interrupted() вернет true, иначе вернет false. При этом, вызов метода .interrupted() также сбрасывает флаг прерывания текущего потока в значение false. 3) .isInterrupted(): Этот метод вызывается на объекте потока и также возвращает значение типа boolean. Он используется для проверки флага прерывания потока. Если флаг прерывания установлен в значение true, то метод .isInterrupted() вернет true, иначе вернет false. В отличие от метода .interrupted(), вызов метода .isInterrupted() не сбрасывает флаг прерывания. Пример использования этих методов: public class MyThread extends Thread { public void run() { while (!isInterrupted()) { // Выполнять работу потока // ... } System.out.println("Поток прерван"); } } public class Main { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); // Прервать выполнение потока thread.interrupt(); } } В этом примере мы создаем класс MyThread, который наследуется от класса Thread и переопределяет метод run(). В методе run() мы проверяем флаг прерывания с помощью метода .isInterrupted(). Если флаг прерывания установлен в значение true, то поток завершает свою работу и выводит сообщение "Поток прерван". В методе main() мы создаем экземпляр класса MyThread и вызываем метод .interrupt() для прерывания выполнения потока. Важно отметить, что прерывание потока является сигналом для потока о том, что его выполнение должно быть прервано. Однако сам поток должен проверять флаг прерывания и принимать соответствующие действия.


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