Сложный вопрос. Для синхронизации ThreadGroup удобно использовать SharedHashMap - объект типа ConcurrentHashMap, в котом по ключу можно получить значения. В него можно положить очередь LinkedBlockingQueue.
Эту очередь может опрашивать отдельная ThreadGroup - есть задания, она работает. Нет заданий - ждет заданий.
А объекты в очередь можно добавлять в другой ThreadGroup. Основной