Причина InterruptedException

Вещь, каждый раз, когда ТРИГГЕРНЫМ критериям соответствуют, ТРИГГЕРНЫЕ огни. Это стреляет однажды в пакетную обработку или Транзакцию. Посмотрите мой урок 101 на ТРИГГЕРЕ

6
задан Jonathan Feinberg 13 October 2009 в 16:35
поделиться

2 ответа

Фактически, поведение блокировки чтения в ответ на прерывание потока не определено. См. эту давнюю ошибку для подробностей. Суть в том, что иногда вы получаете EOF, иногда - IOException.

5
ответ дан 10 December 2019 в 02:50
поделиться

К сожалению, нет, классы 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 . А ты'

4
ответ дан 10 December 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: