Java Thread Pools / Executor Service et wait () s - que deviennent les threads & amp; file d'attente de tâches?

J'ai regardé mais n'ai pas trouvé de réponse donc je voulais confirmer ce pour certains.

Dire que j'ai un fixe la taille du pool de threads - ExecutorService pool = Executors.newFixedThreadPool(5);

Et j'ai un code:

pool.execute(new Runnable(){
    try{
        Object waitForMe = doSomethingAndGetObjectToWaitFor();
        waitForMe.wait();
        doSomethingElse();
    }catch(Exception e){ throw new RunTimeException(e) } 

});

Permet de supposer que le code ci-dessus est appelé quelques fois 100. Il y a seulement 5 threads du pool (alors que 5 des déclarations ci-dessus devrait être actif à un moment). Supposons également que la wait() est sur un objet à faire quelques appels d'e/S à une tierce partie et d'attendre un rappel lorsque l'opération est terminée donc, naturellement, il faudra un certain temps pour terminer.

Maintenant, ma question est quel est le comportement lors de l'une de ces tâches atteint un wait()ne la tâche d'aller dormir, puis le fil de la piscine prend une autre tâche de la file d'attente et commence à courir?

Si la tâche est en attente de mise en veille ce qui se passe quand il fait un notify() et se réveille? Le fil de retourner dans la file d'attente (à l'avant ou à l'arrière) pour le pool de threads et d'attendre jusqu'à ce que l'un des 5 threads peuvent continuer à exécuter (c'est à dire appel doSomethingelse())? Ou ne le thread exécutant également aller dormir dans un des 5 exécuteur fils est assis à attendre avec la tâche (c'est ce que je suppose)? Ou l'exécuteur fil ramasser une autre tâche et simplement être interrompue lorsque la première tâche est de retour de l'wait()?

source d'informationauteur NightWolf