J'ai une piscine à fil fixe qui exécute 7 threads simultanés à tout moment (avec une file d'attente), et je souhaite la transformer en piscine de thread planifiée qui ne fonctionne que 7 emplois simultanés mais que la file d'attente / planche plus. P >
lire la documentation ne m'a pas vraiment aidé. P>
< Strong> Newfixedthreadpool Strong> P>
Statique publique ExecuTertorservice NewfixedTheadpool (int NTrthreads) P>
crée une piscine de fil qui réutilise un ensemble fixe de threads opérant une file d'attente sans bordure partagée. Si un fil se termine en raison d'une défaillance Au cours de l'exécution avant l'arrêt, un nouveau prendra sa place si nécessaire pour exécuter des tâches ultérieures. P>
Paramètres: Nthreads - Le nombre de threads dans la piscine revient: La piscine de thread nouvellement créée p> blockQuote>
< Strong> NewscheDuledTheadpool Strong> P>
Public statique ScheduledExecuteService NewschedledheadPool (int CorepoolSize) P>
crée une piscine de thread qui peut planifier des commandes à exécuter après une donnée donnée retarder ou exécuter périodiquement. p>
Paramètres: CoinPoolSize - Le nombre de fils à garder dans la piscine, même s'ils sont inactifs. Retour: Une piscine de thread planifiée nouvellement créée P> blockQuote>
Ce que je ne comprends pas, c'est que CorepoolSize et NTrthreads la même chose? Est une piscine de thread planifiée vraiment un sous-ensemble d'une piscine à filetage fixe, ce qui signifie que je peux utiliser la piscine de thread planifiée en tant que pool de threads fixe pouvant faire la queue des tâches différées? P>
3 Réponses :
Oui, cela fonctionne de cette façon dans JDK5-6. En principe, l'interface SchedUledExecuterservice est silencieuse sur la question de la taille de la pool, la mise en œuvre réelle utilisée dans JDK utilise un pool fixe: p>
Classe planifiéeTheadPoolEcutor p>
pendant que cette classe hérite de Threadpoolexecutor, quelques-uns des Les méthodes de réglage héritées ne sont pas utile pour cela. En particulier parce que Il agit comme une piscine de taille fixe utilisant filetages de basepoolsize et un sans engagement File d'attente, ajustements à Maximumpoolsize n'ont pas d'effet utile. p> blockQuote>
Évidemment, cela peut ne pas être vrai si vous utilisez une implémentation différente de la planification SchedUtExecUtorservice fournie par un cadre d'application ou un fournisseur différent. P>
J'ai vu ce commentaire et c'est en fait ce qui m'a jeté. Merci!
Oui, ils sont fondamentalement la même chose, juste avec une fonctionnalité de planification ajoutée. Le planificateurTheadpoolExecutore prolonge même la mise en œuvre par défaut de l'exécuteurService (threadpoolexecutor). P>
NTrthreads et CorePoolSize est le nombre de threads à engendrer. Pour un exécuteur fixe, c'est toujours la même chose. Avec l'autre implémentation, il varie entre min (corepoolsize) et max (maxpoolsize). P>
J'ai compris autant, mais j'ai dû m'assurer.
Oui, ils sont exactement les mêmes en ce qui concerne la taille de la piscine de fil: ils finalement tous les deux appelle identique ThreadpoolEcutor constructeur . P>
Pourriez-vous élaborer pourquoi vous voulez autre chose qu'un piscine à fil fixe? Avez-vous lu la Javadoc pour SchedulgueredexCuterservice < / a>?
J'utilise actuellement une région fixePool, mais j'aimerais pouvoir également planifier des tâches après un délai donné .. par exemple. Planifier les tâches à une heure à partir de maintenant, par exemple. ainsi que pouvoir exécuter immédiatement comme je le fais aujourd'hui.
Cela aurait pu être appelé un exécuteurs.NewfixedscheduledTheadpool (n) mais c'est beaucoup de lettres: /