Un ScheduledExecutorService créera-t-il de nouveaux threads si nécessaire?

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.