Ожидать метода класса Condition, не бросающего InterruptedException

У меня странная проблема с методом await класса Condition в Java SE 6. Проблема в том, что метод await NOT всегда выдает исключение при прерывании другим потоком.

В документации написано, что IE бросается, когда:

... какой-то другой поток прерывает текущий поток, и прерывание приостановки потока поддерживается...

Как интерпретировать эту субстанцию: "и прерывание приостановки потока поддерживается"

Это кажется невозможным, чтобы не бросить исключение. У тебя когда-нибудь была подобная проблема?

2 ответа

Решение

Его не невозможно не бросить InterruptedException Что делать, если объект получил сигнал через signal или же signalAll API, спецификация говорит, что эти два метода пробудят любые потоки, которые ожидают в этом условии.

У меня была похожая проблема, был поток, ожидающий при условии:

Lock someLock = new ReentrantLock();
Condition someCondition = someLock.newCondition();
...
someCondition.await(timeout, TimeUnit.MILLISECONDS);

и отправка Thread.interrupt() не сработала. Оказалось, что по ошибке другой поток держал заблокированный someLock, поэтому await() был заблокирован. После того как я добавил someLock.unlock() в надлежащем месте await() начал генерировать InterruptedException, как и ожидалось.

Другие вопросы по тегам