Гибкий CountDownLatch?

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

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

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

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

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

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

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

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