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