10
votes

Différence Java entre le filetage fixe et le threadpool planifié

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.

lire la documentation ne m'a pas vraiment aidé.

< Strong> Newfixedthreadpool

Statique publique ExecuTertorservice NewfixedTheadpool (int NTrthreads)

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.

Paramètres: Nthreads - Le nombre de threads dans la piscine revient: La piscine de thread nouvellement créée

< Strong> NewscheDuledTheadpool

Public statique ScheduledExecuteService NewschedledheadPool (int CorepoolSize)

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.

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

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?


3 Réponses :


1
votes

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:

Classe planifiéeTheadPoolEcutor

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.

É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.


1 commentaires

J'ai vu ce commentaire et c'est en fait ce qui m'a jeté. Merci!



7
votes

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).

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).


1 commentaires

J'ai compris autant, mais j'ai dû m'assurer.



0
votes

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 .


0 commentaires