195 votes

newCachedThreadPool() V/s newFixedThreadPool

newCachedThreadPool() contre newFixedThreadPool(...)

Quand dois-je utiliser chacun d'entre eux et dont la stratégie est de mieux en termes d'utilisation des ressources?

230voto

bruno conde Points 28120

Je pense que les docs expliquer la différence et l'utilisation de ces deux fonctions assez bien:

newFixedThreadPool

Crée un pool de threads qui réutilise un fixe le nombre de threads d'exploitation hors a partagé la surabondance de la file d'attente. À tout point, au plus nThreads threads être actif tâches de traitement. Si des tâches supplémentaires sont soumis lors de l' tous les threads sont actives, elles vont attendre dans la file d'attente jusqu'à ce qu'un thread est disponible. Si un thread se termine en raison d'un échec lors de l'exécution avant l'arrêt, un nouveau prendre sa place si nécessaire à l'exécution d' les tâches à venir. Les discussions dans le piscine existera jusqu'à ce qu'il soit explicitement de l'arrêt.

newCachedThreadPool

Crée un pool de threads qui crée de nouveaux les threads en tant que de besoin, mais de réutilisation des déjà construits discussions lors de l' ils sont disponibles. Ces piscines généralement d'améliorer les performances de les programmes qui s'exécutent de nombreux courte durée tâches asynchrones. Les appels à exécuter réutilisation déjà construits les threads si disponible. Si aucune fil est disponible, un nouveau thread être créés et ajoutés à la piscine. Threads qui n'ont pas été utilisés pour soixante secondes sont terminées et supprimé à partir du cache. Ainsi, une piscine que reste inactif pendant une période suffisamment longue sera ne pas consommer toutes les ressources. Notez que les piscines avec des propriétés similaires, mais des détails différents (par exemple, paramètres de délai d'attente) peuvent être créés à l'aide de ThreadPoolExecutor constructeurs.

En termes de ressources, l' newFixedThreadPool gardera tous les threads en cours d'exécution jusqu'à ce qu'ils sont explicitement mis fin. Dans l' newCachedThreadPool Threads qui n'ont pas été utilisés pendant soixante secondes sont résiliée et retirée à partir du cache.

Compte tenu de cela, la consommation de ressources dépend beaucoup de la situation. Par exemple, Si vous avez un grand nombre de tâches longues, je suggère l' FixedThreadPool. Comme pour l' CachedThreadPool, les docs disent que "Ces piscines sont généralement d'améliorer les performances des programmes qui s'exécutent beaucoup de courte durée des tâches asynchrones".

5voto

Vous devez utiliser newCachedThreadPool seulement, quand vous avez vécu tâches asynchrones comme indiqué dans la Java doc, si vous soumettez des tâches qui prend plus de temps, vous finirez par la création de nombreux fils. Vous pouvez appuyer sur le CPU à 100% si vous soumettez des tâches longues, au rythme plus rapide pour newCachedThreadPool (http://rashcoder.com/be-careful-while-using-executors-newcachedthreadpool/).

0voto

skaffman Points 197885

Aucune n'est meilleure que l'autre, ils ont des comportements différents pour les différentes situations. La documentation javadoc sont très explicites et utile, je suggère de commencer, puis de revenir avec plus d'une question spécifique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X