Мой вопрос связан со всеми этими методами (включая Thread.sleep(...)
), которые бросают InterruptedException
.Java - проблема с резьбой
я нашел заявление на учебник Солнца говоря
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
всегда будет знать о прерывании (не имеет значения, активен ли его один из методов сна)?
@Michael Что бы вы сказали по ответу @zerocrates. Является ли метод 'sleep()' всегда вызывать 'InterruptedException', если поток был прерван (независимо от того, был ли метод сна потока активным или нет)? ........ Вы пытаетесь сказать, что это подействует метод спящего режима не ясен? ...... Если это правда, тогда мне нужно будет предоставить код, который выполняется после прерывания потока, в двух местах: один в предложении 'catch' метода сна и другие в if-блоке if (Thread.interrupted()), потому что если метод sleep генерирует исключение, тогда он очистит прерывание ... –
... состояние и последующий блок if if (Thread.interrupted()) вернет false. –
@ Yatandra: как я писал: поскольку поведение в документе API четко не указано, я не буду зависеть от него. Поместите код, который должен быть выполнен после прерывания в отдельный метод, и вызовите его из обоих мест. –