У меня есть несколько потребительских потоков, ожидающих CountDownLatch
размера 1, используя await()
. У меня есть один поток производителей, который вызывает countDown()
, когда он успешно завершит работу.Как мне отменить «CountDownLatch»?
Это отлично работает, когда нет ошибок.
Однако, если производитель обнаруживает ошибку, я хотел бы, чтобы он мог сигнализировать об ошибке для потребительских потоков. В идеале я мог бы назвать продюсером что-то вроде abortCountDown()
, и все потребители получат InterruptedException или какое-то другое исключение. Я не хочу называть countDown()
, потому что для этого требуются все мои потребительские потоки, чтобы выполнить дополнительную ручную проверку на успех после их вызова await()
. Я бы предпочел, чтобы они просто получили исключение, которое они уже знают, как обращаться.
Я знаю, что устройство прерывания недоступно в CountDownLatch
. Есть ли другой примитив синхронизации, который я могу легко адаптировать для эффективного создания CountDownLatch
, который поддерживает отмену обратного отсчета?
Как использовать этот класс, My Situation У меня есть список, и список динамически обновляется в режиме реального времени. Существует автоматическое событие, входящее в список, на котором я должен ждать 2 минуты, но если между временем ожидания появляется сообщение «Руководство пользователя» в списке, мне приходится прерывать ожидание и действовать немедленно. –