Если ваш работник видит, что сборщики выполнены, то это так же просто, как проверить, пока не завершены потоки ИЛИ очередь не пуста.
Если ваш работник не может видеть состояние сборщиков или даже их количество, вы можете попросить сборщиков передать это состояние в самой очереди по данным.
Представьте, что у объекта данных есть поле источника и логическое поле, помеченное как открытое или закрытое. Например, сборщик 1 отправит что-то вроде:
data-1-opened, data-1-opened ... data-1-closed.
Рабочий должен поддерживать только набор идентификаторов сборщика, добавляя новые записи по мере их появления и удаляя их при закрытии. Таким образом, условие выхода состоит в том, что набор пуст и очередь данных пуста.