Прерывание потока в Java

Опубликовано: 15 Сентября, 2022

В потоках Java, если какой-либо поток находится в спящем или ожидающем состоянии (т. е. вызывается sleep() или wait()), вызов метода interrupt() в потоке прерывает состояние ожидания или ожидания, вызывая InterruptedException. Если поток не находится в состоянии ожидания или ожидания, вызов метода interrupt() ведет себя нормально и не прерывает поток, а устанавливает флаг прерывания в значение true.

Метод interrupt(): если какой-либо поток находится в спящем режиме или ожидает состояния, то с помощью метода interrupt() мы можем прервать выполнение этого потока, показывая InterruptedException. Поток, находящийся в спящем или ожидающем состоянии, может быть прерван с помощью метода interrupt() класса Thread.

Пример: предположим, что есть два потока и если один из потоков заблокирован при вызове методов wait(), wait(long) или wait(long, int) класса Object или join(), join (long), join(long, int), sleep(long) или sleep(long, int) этого класса, то его статус прерывания будет очищен, и он получит InterruptedException, что дает возможность другому потоку для выполнения соответствующего метода run() другого потока, что приводит к высокой производительности и сокращает время ожидания потоков.

Различные сценарии, в которых мы можем прервать поток

Случай 1: прерывание потока, который не перестает работать: в программе мы обрабатываем InterruptedException с помощью блока try и catch, поэтому всякий раз, когда какой-либо поток прерывает текущий исполняемый поток, он выходит из спящего состояния, но не перестает работать. .

Случай 2: Прерывание потока, который перестает работать: В программе после прерывания текущего выполняющегося потока мы выбрасываем новое исключение в блоке catch, поэтому он перестает работать.

Выход

Exception in thread "Thread-0" java.lang.RuntimeException: Thread interrupted
    at Geeks.run(File.java:13)

Случай 3: Прерывание нормально работающего потока: В программе не возникло исключения во время выполнения потока. Здесь прерывание только устанавливает флаг прерывания в значение true, что позже может быть использовано Java-программистами.

Эта статья предоставлена Бишалом Кумаром Дубеем . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью с помощью write.geeksforgeeks.org или отправить ее по адресу review-team@geeksforgeeks.org. Посмотрите, как ваша статья появится на главной странице GeeksforGeeks, и помогите другим гикам. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.