Когда в какой-то поток вызывается Thread.interrupt()
, что происходит с этим потоком?Когда в какой-то поток вызывается Thread.interrupt(), что происходит?
ответ
Целевая тема "прервана". В основном, в этом потоке установлен флаг, на который может смотреть нить (с Thread.interrupted()
). Если целевая нить в настоящее время заблокирована на некоторых входах/выходах или Object.wait()
, то она пробуждается, соответственно, с InterruptedIOException
или InterruptedException
.
Прерывание нити - это нежный способ подтолкнуть резьбу. Он используется, чтобы дать потокам возможность выйти чисто, в отличие от Thread.stop()
, что больше похоже на стрельбу по резьбе с помощью автомата.
'InterruptedIOException' маловероятно, это практика. Прерывистый ввод-вывод был включен в Solaris ненадолго, но это просто не стоит. Конечно, реализация специфична для реализации. Обычно (в последнее время) ОС будет иметь какое-то отношение к потокам. –
+1 для объяснения самостоятельно и сравнения выстрелов. – helios
Javadoc for that method объясняет, что происходит в какой ситуации.
Вот JDK 1.6 Javadoc:
Прерывание этой темы.
Если текущий поток не прерывая себя, что всегда разрешено, метод CheckAccess из этот поток вызывается, что может привести к SecurityException быть выброшен.
Если поток блокируется в вызове ожидания(), ждать (долго), или ждать (долго, INT) методы класса объектов, или объединения(), присоединиться (длинный), join (long, int), sleep (long), или sleep (long, int), методов данного класса, то его статус будет очищен, а получит Прерывание Исключения.
Если этот поток блокируется в I/O операции при прерываемом канала, то канал будет закрытыми, статус прерывания потока будет установлен, и нить будет получать ClosedByInterruptException.
Если этот поток блокируется в Selector, то состояние прерывания нити будет установлено, и он будет возвращать непосредственно из операции выбора , возможно, с ненулевым значения, так же, как если селектор в пробуждении метод.
Если ни одно из предыдущих условий не задержит, то это прерывание этой нити будет установлено.
Прерывание нити, которая не является живым, не должна иметь никакого эффекта.
ZeissS правильный, сигнализация - самый чистый способ сделать это. вы также можете поймать исключение прерывания и очистить его.
- 1. Что происходит, когда вызывается SqlCommand.Dispose?
- 2. Что происходит, когда вызывается rangeOfCharacterFromSet?
- 3. Что происходит, когда вызывается dbcontext.Database.ExecuteSqlCommand?
- 4. Что происходит, когда вызывается Graphics.MeasureString()?
- 5. Что происходит, когда вызывается ошибка?
- 6. Что происходит, когда вызывается ShowMessage?
- 7. Что происходит, когда вызывается popToRootViewController?
- 8. Что происходит, когда поток блокируется в Python?
- 9. Что происходит в системе, когда вызывается canvas.drawBitmap?
- 10. Что происходит, когда ToArray() вызывается в IEnumerable?
- 11. Что происходит, когда умирают() вызывается в функции
- 12. Что происходит с памятью, когда putExtra() вызывается?
- 13. Что происходит, когда вызывается alloc или allocWithZone?
- 14. Что происходит, когда вызывается ядро CUDA?
- 15. Что происходит, когда FlurryWP8SDK.Api.EndTimedEvent не вызывается?
- 16. Что происходит, когда .NET-поток генерирует исключение?
- 17. Что происходит, когда вы прерываете поток HTTP?
- 18. Что происходит внутри, когда внешний поток закрыт?
- 19. Что происходит с QDialogs, когда вызывается метод quit() приложения Qt?
- 20. Что происходит с объектами DataRow, когда Dispose вызывается в DataTable?
- 21. Что именно происходит, когда form_for вызывается в рельсах?
- 22. В C++, что происходит, когда вызывается оператор delete?
- 23. Что происходит, когда рекурсия вызывается дважды в методе?
- 24. Что происходит, если Thread.getUncaughtExceptionHandler(). UncaughtException вызывается напрямую?
- 25. Thread.join() и Thread.interrupt() не останавливает поток
- 26. Вставка происходит, когда UPDATE вызывается в PreparedStatement
- 27. Что происходит, когда вилки резьбы?
- 28. Что происходит, когда параметризованный селектор вызывается без параметров?
- 29. Что происходит, когда функция со статической переменной вызывается несколькими потоками?
- 30. Что происходит, когда/if onReceive override вызывается из нескольких приложений?
Можете ли вы уточнить? Мне кажется, документация говорит об этом довольно хорошо: http://java.sun.com/javase/6/docs/api/java/lang/Thread.html # interrupt() Я предполагаю, что есть что-то, что не ясно, хотя, если вы можете уточнить свой вопрос? –