ожидать метода класса Condition, не бросающего InterruptedException - PullRequest
1 голос
/ 30 ноября 2011

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

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

1 голос
/ 06 ноября 2016

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

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

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

...