Гибкий CountDownLatch?

Я дважды сталкивался с проблемой, когда поток-производитель создает N рабочих элементов, отправляет ихExecutorService и затем необходимо дождаться, пока все N элементов будут обработаны.

Предостережения

N не известен заранее, Если бы это было так, я бы просто создалCountDownLatch а потом есть продюсерская нитьawait() пока все работы не были завершены.ИспользуяCompletionService неуместно, потому что, хотя мой поток производителя должен блокироваться (то есть, вызываяtake()) естьнет способа сообщить, что вся работа завершена, чтобы заставить поток производителя перестать ждать.

Мое любимое решение - использовать счетчик целых чисел иприращение это всякий раз, когда предмет работы представлен идекремент это когда рабочий элемент обрабатывается. После выполнения всех N задач мой поток производителя должен будет ждать блокировки, проверяя,counter == 0 всякий раз, когда это уведомлено. Поток (и) потребителя должен будет уведомить производителя, если он уменьшил счетчик и новое значение равно 0.

Есть ли лучший подход к этой проблеме или есть подходящая конструкция вjava.util.concurrent Я должен использовать, а не "катится самостоятельно "?

Заранее спасибо.

Ответы на вопрос(6)

Ваш ответ на вопрос