J’utilise Executors.newScheduledThreadPool()
pour créer un ScheduledExecutorService
, en spécifiant le nombre de threads comme suit:
int corePoolSize = 42; ScheduledExecutorService foo = Executors.newScheduledThreadPool(corePoolSize);
Selon JavaDocs, les arguments de base corePoolSize
le nombre de threads à conserver dans le pool, même s’ils sont inactifs.
Cela signifie-t-il que cette implémentation ExecutorService
peut créer plus que des threads corePoolSize
selon les besoins, similaires à un pool de threads mis en cache ?
Non. La réponse correcte est non, un ScheduledExecutorService ne créera pas de nouveaux threads.
Voir la réponse ici
Cela signifie-t-il que cette implémentation ExecutorService peut créer plus que des threads
corePoolSize
selon les besoins?
Oui, c’est exactement ce que cela signifie. La raison de l’existence de corePoolSize
est le coût de la création de threads. Si vous vous attendez à exécuter un grand nombre de tâches éphémères sur votre service exécuteur, vous pouvez vous attendre à trouver, à un moment donné, un grand nombre de threads inactifs .
Plutôt que de laisser ces threads mourir, pour ne plus être remplacés que très peu de temps après par de nouveaux threads, corePoolSize
garantira qu’il y aura toujours un certain nombre de threads en rotation.