Java: notifique a la clase principal cuando todos los subprocesos en el grupo de subprocesos hayan terminado / la misma instancia de objeto en subprocesos diferent

¿Cómo notifico a mi clase principal que instancia unaThreadPoolExecutor cuando todos los hilos dentro de laThreadPoolExecutor están completos?

ThreadPoolExecutor threadPool = null;
ThreadClass threadclass1;
ThreadClass threadclass2;
final ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(maxPoolSize);

puclic MyClass(){
        threadPool = new ThreadPoolExecutor(poolSize, maxPoolSize, keepAliveTime, TimeUnit.SECONDS, queue);

        threadClass1 = new ThreadClass;
        threadClass2 = new ThreadClass;

        threadPool.execute(threadClass1);
        threadPool.execute(threadClass2);

        //Now I would like to do something until the threadPool is done working
        //The threads fill a ConcurrentLinkedQueueand I would like to poll
        //the queue as it gets filled by the threads and output 
        //it to XML via JAX-RS

}
EDIT 1

Wile my, los subprocesos obtienen datos de alguna parte y llenan esta información en un ConcurrentLinkedQueue. Básicamente me gustaría realizar alguna acción en MyClass para actualizar la salida XML con los resultados. Cuando se terminan todos los subprocesos, me gustaría volver verdadero al servicio web JAX-RS que instanciaba MyClass para que el servicio web sepa que se han obtenido todos los datos y ahora puede mostrar el archivo XML final

EDIT 2

Estoy pasando unQueue a los subprocesos para que puedan agregar elementos a la cola. Cuando unodriver ha terminado de agregar elementos a laarticleQueue Quiero realizar una acción dentro de mi clase principal, sondear la entidad desde laQueue y entregárselo a laresponse objeto para mostrarlo de alguna manera.

Cuando paso la cola a los hilos, ¿están trabajando con el mismo objeto o con una "copia" del objeto para que los cambios dentro del hilo no afecten al objeto principal? Ese no es el comportamiento que quiero. Cuando verifico el tamaño de laarticleQueue dentro deDriver está18, el tamaño de laarticleQueue en elDriverController es0.

¿Hay una mejor manera de reaccionar cuando un hilo ha agregado algo a la cola que no sea mi ciclo while? ¿Cómo debo modificar mi código para acceder al mismo objeto dentro de diferentes clases?

DriverController
public class DriverController {

    Queue<Article> articleQueue;

    ThreadPoolExecutor threadPool = null;
    final ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(
            maxPoolSize);

    public DriverController(Response response) {

        articleQueue = new ConcurrentLinkedQueue<Article>();
        threadPool = new ThreadPoolExecutor();
        Driver driver = new Driver(this.articleQueue);

        threadPool.execute(driver);
        // More drivers would be executed here which add to the queue

        while (threadPool.getActiveCount() > 0) {
            // this.articleQueue.size() gives back 0 here ... why?
            if(articleQueue.size()>0){
                response.addArticle(articleQueue.poll());
            }
        }

    }
}
Conducto
public class Driver implements Runnable{

    private Queue<Article> articleQueue;

    public DriverAlliedElectronics(Queue articleQueue) {
        this.articleQueue = articleQueue;
    }

    public boolean getData() {
        // Here would be the code where the article is created ...

        this.articleQueue.offer(article);
        return true;
    }

    public void run() {
        this.getData();
        // this.articleQueue.size() gives back 18 here ...

    }
}

Respuestas a la pregunta(6)

Su respuesta a la pregunta