Comment bloquer jusqu'à ce qu'un BlockingQueue soit vide?

Je suis à la recherche d'un moyen de bloquer jusqu'à ce qu'un BlockingQueue est vide.

Je sais que, dans un environnement multithread, tant qu'il existe des producteurs à mettre des objets dans la BlockingQueueil peut y avoir des situations dans lesquelles la file d'attente est vide et quelques nanosecondes plus tard, il est plein d'éléments.

Mais, si il n'y a qu' un producteur, alors il peut attendre (et le bloc) jusqu'à ce que la file d'attente est vide après qu'il a cessé de mettre des éléments dans la file d'attente.

Java/Pseudo:

//Producer code
BlockingQueue queue = new BlockingQueue();

while (having some tasks to do) {
    queue.put(task);
}

queue.waitUntilEmpty(); //<-- how to do this?

print("Done");

Avez-vous une idée?

MODIFIER: je sais que l'emballage BlockingQueue et à l'aide d'une condition supplémentaire ferait l'affaire, je demande juste si il y a quelques pré-solutions et/ou de meilleures alternatives.

source d'informationauteur gd1 | 2013-03-03