Что происходит, когда вы вызываете прерывание потока ()? - PullRequest
8 голосов
/ 07 декабря 2010

Мне нужно знать, что происходит

  1. когда он спит?
  2. когда он выполняется, т.е. выполняет заданную задачу.

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 07 декабря 2010

Прерывание потока - это безопасный для состояния способ его отмены, но сам поток должен быть закодирован, чтобы обратить внимание на прерывания.Длинные, блокирующие Java-операции, которые генерируют InterruptedException, сгенерируют это исключение, если во время выполнения этого потока произойдет .interrupt().

Метод .interrupt() устанавливает флаг "прерывания" для этого потока и прерывает любой ввод-выводили операции сна.Он больше ничего не делает, поэтому ваша программа должна отвечать соответствующим образом - и проверять свой флаг прерывания через Thread.interrupted() через регулярные интервалы.

Если поток не проверяет прерывания, он не может быть безопасноостановился.Thread.stop() небезопасно использовать. Таким образом, вы используете .interrupt(), чтобы остановить поток, но при написании многопоточного кода вы должны убедиться, что .interrupt() сделает что-то разумное. Эта статья TechRepublic является довольно хорошим учебником.

6 голосов
/ 07 декабря 2010

Судя по вашим предыдущим вопросам, я предполагаю, что вас интересует поведение Java.

В Java будет выброшено InterruptedException, если поток в данный момент блокирует.Если поток не блокирует, исключение не будет выброшено.

Для получения дополнительной информации, смотрите здесь:
JavaDocs

Для языков .NET, a ThreadInterruptedException будет выброшено, если поток в данный момент блокируется.Если поток не блокирует, исключение не будет выдано, пока поток не заблокируется.

Пожалуйста, пометьте свой вопрос тем языком, на который вы хотите получить ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...