Мой вопрос касается всех тех методов (включая Thread.sleep(...)
), которые выдают InterruptedException
.
Я нашел заявление в учебнике Sun о том, что
InterruptedException
- это исключение, которое sleep
генерирует, когда другой поток прерывает текущий поток, пока спящий режим активен.
Значит ли это, что прерывание будет игнорироваться, если sleep
не активен во время прерывания?
Предположим, у меня есть две темы: threadOne
и threadTwo
. threadOne
создает и запускает threadTwo
. threadTwo
выполняет исполняемый файл, метод запуска которого выглядит примерно так:
public void run() {
:
:
try {
Thread.sleep(10 * 1000);
} catch (InterruptedException e) {
return;
}
:
:
: // In the middle of two sleep invocations
:
:
try {
Thread.sleep(10 * 1000);
} catch (InterruptedException e) {
return;
}
:
:
}
После создания потока threadOne
прерывает threadTwo
. Предположим, что threadTwo
находится в середине двух вызовов сна во время прерывания (когда не активирован ни один метод сна), а затем второй метод сна выдает InterrupteException
, как только он будет вызван?
Если нет, то будет ли это прерывание игнорироваться вечно?
Как быть уверенным, что threadTwo
всегда будет знать о прерывании (не имеет значения, активен ли один из методов сна) или нет?