Comment la taille du pool de travailler avec le Printemps des tâches planifiées?
J'ai une tâche planifiée en tant que tel:
<task:scheduler id="notification.scheduler" pool-size="15" />
<task:scheduled-tasks scheduler="notification.scheduler">
<task:scheduled ref="notificationProcessor" method="sendNextQueueEvent" fixed-rate="500" />
<task:scheduled ref="notificationProcessor" method="deleteNextCompletedEvent" fixed-rate="60000" />
</task:scheduled-tasks>
Je pense que j'ai une mauvaise compréhension de la façon dont les tâches planifiées de travail avec la taille du pool. En dépit de la taille du pool de 15, il semble qu'un seul thread est utilisé. Par exemple, si j'ai une quinzaine d'événements dans la file d'attente, je pense qu'il y aurait quinze fils de vérifier toutes les minutes pour supprimer un événement de la file d'attente. Évidemment, c'est faux.
Comment puis-je faire en sorte qu'il n'y a quinze fils de l'appel de cette méthode pour l'intervalle de temps à l'aide de Printemps du planificateur de l'abstraction?
Edit: Ce que je veux accomplir, c'est ceci: Toutes les demi-secondes, je veux vérifier pour voir si il y a en file d'attente des événements à envoyer. Lorsque cela est fait, je veux envoyer un maximum de 15 (si 15 exister). Comment pourrais-je accomplir cela en utilisant le printemps des abstractions pour le fil de java trucs?
OriginalL'auteur AHungerArtist | 2012-04-20
Vous devez vous connecter pour publier un commentaire.
Tout d'abord
<task:scheduler/>
est un wrapper autour deScheduledThreadPoolExecutor
l'extension deThreadPoolExecutor
. JavaDoc pour le dernier dit:Deuxièmement, vous devez comprendre que les tâches planifiées (c'est une fonctionnalité, pas du Printemps) ne pas s'exécuter simultanément, même si elles prennent plus de temps que l'intervalle de répétition. Ils ont tout simplement attendre. Si vous n'avez pas 15 événements dans la file d'attente, vous disposez de 15 exécutions qui sont en retard et attendre que le thread unique. Pas besoin d'en créer un autre en raison de la prochaine exécution doit attendre que la précédente à la fin. Encore une fois, c'est la façon dont Java cadre de la planification des travaux.
Bien sûr, si vous avez plusieurs tâches planifiées, plus de threads sera créé.
Donc, je pense, qu'est-ce que la valeur de la taille du pool? Est-ce que si il y a cinq tâches, mais la taille du pool est de deux, les autres tâches devront attendre jusqu'à ce que les deux premiers sont-ils faits?
non, en fait une meilleure approche serait d'avoir un Printemps réussi piscine avec
pool-size="15"
simplement l'ajout d'un nouvel emploi ordinaireExecutorService
avec 15 fils. Ensuite, il permettra de traiter les événements à l'aide de tous les threads aussi vite que possible. Veuillez expliquer votre requiremenets mieux, vous voulez exécuter du code des toutes les 500ms dans 15 threads simultanément? Ajoutez à cette question ou à en ouvrir un autre, donc nous pouvons penser à une solution élégante. N'oubliez pas de post de suivi de lien le cas échéant.Je vais modifier cette question afin de mieux expliquer mes résultats souhaités. Je vous remercie pour l'aide.
Mise à jour pour expliquer ce que je cherche.
OriginalL'auteur Tomasz Nurkiewicz
Du printemps
tâche:planificateur
est par défaut des propriétés du bean wrapper pourjava.util.de façon concomitante.ThreadPoolExecutor
:Cela ne garantit pas que le
pools-size
propriété est équivalent au fait que nombre de active threads. D'autre part, il faut noter qu'au un moment donné dans le temps il peut y avoir qu'un nombre maximal de threads de l'égalité de traitement des cœurs sur la machine que vous utilisez; c'est à dire tous les autres threads en attente de passer àRUNNING
mode et de continuer l'exécution.Aussi, au Printemps, de la documentation, il mentionne que si ce n'est pas ce dont vous avez besoin, vous pouvez également profiter de
ConcurrentTaskExecutor
.Quatre est le nombre maximum de actives simultanées threads, vous pouvez avoir; ce n'est pas la première configuration par défaut. Voir l'appel est également dépendante sur différentes choses comme la simultanéité modèle de la file d'attente que vous utilisez pour les événements et le taux/période dont la tâche est exécutée. J'espère que cette aide.
OriginalL'auteur nobeh