2010-11-30 6 views
5

Je souhaite exécuter simultanément plusieurs tâches planifiées.@Scheduled & scheduler: Que fait exactement la taille du pool?

Lors de la configuration du printemps de le faire, je peux fournir une piscine de taille au planificateur:

<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/> 
<task:executor id="myExecutor" pool-size="32"/> 
<task:scheduler id="myScheduler" pool-size="1000"/> 

Mais qu'est-ce exactement la taille avec une belle piscine ici signifie? Cela signifie-t-il qu'il ne peut stocker que 1000 méthodes programmées ou que cela signifie que seulement 1000 méthodes peuvent être traitées en même temps?

tldr; Si une méthode annotée @Scheduled (fixedDelay = 60) est et non exécutée pour le moment (c'est-à-dire entre le délai), est-ce qu'elle remplit le pool ou pas?

Répondre

4

Il fait référence au nombre de threads qui peuvent être regroupés en une fois par ThreadPoolExecutor sous-jacent, c'est-à-dire le nombre notionnel de méthodes pouvant être exécutées en même temps.

La documentation sur le task namespace va dans beaucoup de détails dont vous avez besoin.

Je pense que 1000 threads vont probablement être beaucoup trop nombreux dans la plupart des environnements.

+0

Donc, il n'est pas regroupé avant l'exécution? Lorsque l'exécution est terminée, le thread correspondant est supprimé du pool jusqu'à la prochaine exécution? – chzbrgla

+1

La documentation n'est pas spécifique sur ce que signifie 'pool-size', mais généralement, cela signifie le nombre total de threads qui existeront à tout moment. Certains d'entre eux peuvent être occupés, et certains peuvent être inactifs, mais tous sont considérés comme étant dans la piscine. –

+0

@Tom - Vous avez raison sur le fonctionnement du pool, mais la documentation est assez spécifique: elle utilise ThreadPoolTaskExecutor et la taille du pool est passée à celle-ci. – GaryF

Questions connexes