Est-il sûr de démarrer un pool de threads dans un constructeur d'objets? Je sais que vous ne devriez pas démarrer un thread à partir d'un constructeur, quelque chose à propos de l'échappement du pointeur "this" (je ne comprends pas exactement cela, mais j'effectuerai d'autres recherches pour essayer de le comprendre).Java démarrant un pool de threads dans le constructeur d'objets
Le code ressemblerait à quelque chose comme ceci:
private ExecutorService pool;
public handler()
{
pool = Executors.newCachedThreadPool();
}
public void queueInstructionSet(InstructionSet set)
{
pool.submit(new Runnable that handles this instruction set);
}
Si cela ne fonctionne pas, je pourrais simplement créer cette classe comme Runnable et commencer dans un nouveau thread. Cependant, il semblerait que ce serait ajouter un fil inutile au programme où il n'en a pas vraiment besoin.
Merci.
EDIT:
Merci pour les réponses tout le monde, ils ont certainement contribué à faire de ce sens. Dans mon esprit, il est logique que ce constructeur crée le pool de threads, mais permettez-moi d'expliquer ce que fait ce code, parce que je pense peut-être bizarrement.
Tout le but de cet objet est de prendre des objets "Instruction Sets", et d'agir en conséquence. Les jeux d'instructions proviennent de clients connectés à un serveur. Une fois qu'un ensemble d'instructions complet est reçu d'un client, ce jeu d'instructions est envoyé à cet objet (gestionnaire) pour traitement.
Cet objet gestionnaire contient une référence à chaque objet sur lequel un jeu d'instructions peut agir. Il soumettra l'ensemble d'instructions à un pool de threads, qui trouvera l'objet avec lequel cet ensemble d'instructions souhaite interagir, puis gérera le jeu d'instructions sur cet objet.
Je pourrais gérer l'objet set d'instructions dans le serveur IO, mais mes pensées ont une classe distincte car elle rend le code entier plus lisible, car chaque classe se concentre sur une seule chose spécifique.
Pensées? Conseil?
Merci
Merci, ça aide. J'ai mis à jour le PO avec ce que fait ce code. Je pense qu'il est logique d'avoir le constructeur créer le pool de threads, mais je suis assez nouveau à ce sujet et accueillerais tout conseil que je peux obtenir :) – vimalloc
@kyena: OK, la réponse éditée. Fondamentalement, il semble que ce soit probablement correct. Votre classe est en fait * un * pool de threads (via la composition). –
Merci! J'apprécie l'aide :) – vimalloc