comment ne pas accabler java executorservice tâche de la file d'attente?

J'ai le code ci-dessous l'extrait de code, qui fonctionne très bien. Mais le problème est qu'il crée et mis sur plus de 2000 des tâches sur l'exécuteur de la file d'attente droite au large de la chauve-souris.

Je besoin de vérifier si les tâches déjà à l'exécuteur de la file d'attente sont complets, alors seulement lui donner plus de tâches. Il n'a pas à être exact, c'est à dire si la file d'attente a <10 tâches à gauche, ajouter 50 plus.

Donc l'exécuteur de tâches de la file d'attente n'ont donc de nombreuses tâches en attente, ce qui permettra également à l'arrêt() pour des travaux en temps opportun, autrement, même si elle est appelée, l'exécuteur testamentaire encore en train d'essayer de terminer tous les 2000 tâches dans la file d'attente de la première.

Quelle est la meilleure façon d'accomplir cette? merci

executor = Executors.newFixedThreadPool(numThreads);

while(some_condition==true)
{
    //if(executor < 10 tasks pending)  <---- how do i do this?
    //{                             
        for(int k=0;k<20;k++)
        {  
            Runnable worker = new MyRunnable();
            executor.execute(worker);
        }
    //}
    //else 
    //{
    //     wait(3000);
    //}
} 

Mise à jour à l'aide de sémaphore:

private final Semaphore semaphore = new Semaphore(10)
executor = new ThreadPoolExecutorWithSemaphoreFromJohnExample();

while(some_condition==true)
{

        Runnable worker = new MyRunnable();
        //So at this point if semaphore is full, then while loop would PAUSE(??) until
        //semaphore frees up again.
          executor.execute(worker);   
} 

OriginalL'auteur user1539050 | 2012-07-19