Вещь, каждый раз, когда ТРИГГЕРНЫМ критериям соответствуют, ТРИГГЕРНЫЕ огни. Это стреляет однажды в пакетную обработку или Транзакцию. Посмотрите мой урок 101 на ТРИГГЕРЕ
Фактически, поведение блокировки чтения в ответ на прерывание потока не определено. См. эту давнюю ошибку для подробностей. Суть в том, что иногда вы получаете EOF, иногда - IOException.
К сожалению, нет, классы java.io. *
не реагируют на прерывания, когда они заблокированы в методах чтения или записи. Обычно вам нужно закрыть поток, а затем обработать возникшее IOException
. Я повторяю этот шаблон во всем моем коде:
try {
for (;;) {
try {
inputStream.read(data);
thread.join();
}
catch (IOException exception) {
// If interrupted this isn't a real I/O error.
if (Thread.interrupted()) {
throw new InterruptedException();
}
else {
throw exception;
}
}
}
}
catch (InterruptedException exception) {
}
В качестве альтернативы, новые классы java.nio. *
лучше обрабатывают прерывания и генерируют исключения InterruptedIOException
, когда они прерываются. Обратите внимание, что это исключение является производным от IOException
, а не от InterruptedException
, поэтому вам, вероятно, потребуются два предложения catch
для обработки любого типа исключения, одно для InterruptedException
и одно для InterruptedIOException
. А ты'