J'ai un service qui utilise un pool de threads fixe car plus de 10 instances de cette tâche lourde seront trop lourdes pour mon serveur.ExecutorService avec n threads et n objets correspondants
ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(10);
Je l'utilise quelque chose comme:
Runnable command = new Runnable() {
@Override
public void run() {
MyHeavyClassWithCache myHeavyClassWithCache=new MyHeavyClassWithCache();
}
};
Future<ScreenImage> feature = executor.submit(command,myHeavyClassWithCacheResult);
Maintenant, je dois aussi que les instances n (10) de la classe MyHeavyClassWithCache. Et aussi besoin de le réutiliser en quelque sorte dans l'exécuteur (beaucoup plus vite que de le créer comme je le fais maintenant). Comment puis-je gérer ce genre de chose avec ExecutorService? L'objectif est d'atteindre ce maximum de 10 threads fonctionnant en même temps en utilisant l'une de mes 10 instances de classe MyHeavyClassWithCache (jamais deux threads avec les mêmes instances en même temps!)
J'espère que c'est assez commun pour exister certains java modèle de conception pour y parvenir.
Ce que vous cherchez est un pool d'objets. Vous pouvez utiliser commons-pool pour l'implémenterhttp: //commons.apache.org/proper/commons-pool/ – seneque
Oui c'est ce dont j'ai besoin. Je l'ai mis en place et ça marche bien jusqu'à présent. Écrivez votre commentaire comme réponse ici. Merci beaucoup! –