Мне нужно знать, что будетЧто происходит, когда вы вызываете прерывание потока()?
- когда он спит?
- , когда он работает, то выполняет данную задачу.
Заранее спасибо.
Мне нужно знать, что будетЧто происходит, когда вы вызываете прерывание потока()?
Заранее спасибо.
Судя по вашим предыдущим вопросам, я предполагаю, что вас интересует поведение Java.
В Java InterruptedException
будет выброшен, если поток в настоящее время блокируется. Если поток не блокируется, исключение не будет выбрано.
Для получения дополнительной информации, смотрите здесь:
JavaDocs
для .NET языков с ThreadInterruptedException
будет сгенерирован, если поток в настоящее время блокировки. Если поток не блокирует исключение, он не будет отбрасываться до тех пор, пока поток не блокируется.
Пожалуйста, отметьте свой вопрос языком, на который вы хотите получить ответ.
Прерывание потока - это безопасный для пользователя способ отменить его, но сам поток должен быть закодирован, чтобы обратить внимание на прерывания. Длинные блокирующие операции Java, которые бросают InterruptedException
, выкинут это исключение, если .interrupt()
происходит во время выполнения этого потока.
Метод .interrupt()
устанавливает флаг прерывания для этого потока и прерывает любые операции ввода-вывода или спящего режима. Он ничего не делает, поэтому ваша программа должна реагировать соответствующим образом - и проверять свой флаг прерывания через Thread.interrupted()
через равные промежутки времени.
Если нить не проверяет прерывания, ее нельзя безопасно остановить. Thread.stop()
is unsafe to use. Итак, вы используете .interrupt()
, чтобы остановить поток, но при написании многопоточного кода вам нужно убедиться, что .interrupt()
сделает что-то разумное. This TechRepublic article is a pretty good tutorial.
** Hi Adam, ** Я думаю, что *** «Длинные блокирующие операции Java, которые вызывают InterruptedException, будут вызывать это исключение, если встречается поток .interrupt(), когда этот поток выполняется» *** - это совсем другое. Вы говорите, что поток ** блокирует **, то это происходит потому, что: 1) он был усыпан в течение установленного промежутка времени. 2) он приостановлен с вызовом suspend() и будет заблокирован до возобновления() сообщение 3) поток приостанавливается вызовом wait() и станет исполняемым при уведомлении или уведомлении. Во всех этих случаях поток не выполняет ничего, что находится в заблокированном состоянии. когда int – AKh 2010-12-08 18:38:22
Аналогичная история в Java, за исключением того, что (1) исключение называется «InterruptedException», и (2) поток имеет «статус прерывания», который установлен, если поток не ждет или не спят. Я не уверен, что блокировка с уже установленным статусом прерывания вызовет исключение, но выбор будет менее вероятным. – cHao 2010-12-06 22:36:14