Cette question concerne les retombées de l'utilisation de SingleThreadExecutor
(JDK 1.6). Des questions connexes ont déjà été posées et répondues dans ce forum, mais je crois que la situation à laquelle je suis confrontée est un peu différente.Multiple SingleThreadExecutors pour une application donnée ... une bonne idée?
Divers composants de l'application (appelons les composants C1, C2, C3 etc.) génèrent des messages (sortants), principalement en réponse à des messages (entrants) qu'ils reçoivent d'autres composants. Ces messages sortants sont conservés dans des files d'attente qui sont généralement ArrayBlockingQueue
instances - pratique assez standard peut-être. Toutefois, les messages sortants doivent être traités dans l'ordre dans lequel ils ont été ajoutés. Je suppose que l'utilisation d'un SingleThreadExector
est la réponse évidente ici. Nous finissons par avoir une situation 1: 1 - unSingleThreadExecutor
pour une file d'attente (qui est dédiée aux messages émanant de un composant).
Maintenant, le nombre de composants (C1, C2, C3 ...) est inconnu à un moment donné. Ils viendront à l'existence en fonction des besoins des utilisateurs (et seront également éliminés). Nous parlons de 200 à 300 de ces composants à la charge de pointe. Suivant le principe de conception 1: 1 énoncé ci-dessus, nous allons organiser pour 200 SingleThreadExecutor
s. C'est la source de ma requête ici.
Je ne suis pas à l'aise avec la pensée de devoir créer autant de SingleThreadExecutor s. Je préfèrerais essayer d'utiliser un pool de SingleThreadExecutor s, si cela est logique et plausible (tout cours/modèle prêt à l'emploi, vu avant). J'ai lu beaucoup de messages sur l'utilisation recommandée de SingleThreadExecutor
ici, mais qu'en est-il une piscine de la même chose?
Qu'en pensent les femmes et les hommes érudits? Je voudrais être dirigé, corrigé ou simplement, admonesté :-).
La commande est-elle globale ou par composant? – cletus
Bonne question et désolé, je n'ai pas précisé cela. L'exigence de commande est par composant. –