ThreadPool ne pas exécuter des tâches en séquence

Je suis en utilisant le Executor cadre spécifiquement Executors.newCachedThreadPool();
J'ai une liste de Runnables par exemple 100.
Les 50 premiers créer chacun une valeur (stockés dans une liste) pour être utilisé par le dernier 50.
J'ai pensé que si je passe le Runnables dans le executor.execute() dans l'ordre qu'ils sont dans la liste, ils seraient
également exécutées dans le même ordre.
Mais ce n'est pas le cas.
Les tâches semblent être exécutées dans un ordre aléatoire et ils sont entrelacés, pas exécutés dans l'ordre.
Est-ce la façon dont il est suppose de travailler? De toute façon de contourner ce problème?

Grâce

Les exécuteurs.execute() ne fait pas les garanties de classement. Les travailleurs vont prendre de la file d'attente dans l'ordre, mais peut-être le contexte de commutation à tout moment avant l'achèvement des travaux. Donc si vous avez 50 threads la liste peut sauter jusqu'à 50 tâches à venir.
L'ordre n'est garanti que si vous avez un thread. Sinon, le prochain thread va commencer la prochaine tâche.

OriginalL'auteur Cratylus | 2010-12-17