producteur/consommateur files d'attente de travail

Je suis à la lutte avec la meilleure façon de mettre en œuvre mes pipeline de traitement.

Mes producteurs flux de travail à un BlockingQueue. Du côté du consommateur, je interrogation de la file d'attente, l'envelopper de ce que je reçois dans un Praticable de la tâche, et la soumettre à un ExecutorService.

while (!isStopping())
{
    String work = workQueue.poll(1000L, TimeUnit.MILLISECONDS);
    if (work == null)
    {
        break;
    }
    executorService.execute(new Worker(work));   //needs to block if no threads!
}

Ce n'est pas l'idéal; le ExecutorService a sa propre file d'attente, bien sûr, de sorte que ce qui se passe réellement, c'est que je suis toujours pleinement vidange de ma file d'attente de travail et de remplissage de la file d'attente des tâches, qui se vide lentement que les tâches sont terminées.

Je me rends compte que je pouvais tâches de file d'attente à la production de la fin, mais j'aurais vraiment préféré ne pas le faire - j'aime l'indirection/isolation de ma file d'attente de travail étant muet cordes; ce n'est pas vraiment toute entreprise du producteur, ce qui va leur arriver. En forçant le producteur de la file d'attente d'un Exécutable ou Remboursables par anticipation les sauts de une abstraction, à mon humble avis.

Mais je ne veux pas le travail en commun de la file d'attente pour représenter l'état actuel du traitement. Je veux être en mesure de bloquer les producteurs si les consommateurs ne suivent pas.

J'aimerais utiliser les Exécuteurs, mais je sens que je suis en lutte contre leur conception. Puis-je partiellement boire le Kool-ade, ou dois-je avaler? Suis-je mal posé, à résister à des files d'attente des tâches? (Je pense que je pourrait mettre en place ThreadPoolExecutor d'utiliser un 1-tâche de la file d'attente et de remplacer la méthode execute pour bloquer plutôt que de le rejeter-sur-file d'attente-plein, mais qui se sent brut.)

Suggestions?

Exactement ma pensée. Merci de mettre cela par écrit. Intéressant qu'il n'y a pas de bibliothèque.

OriginalL'auteur Jolly Roger | 2010-02-10