2010-12-07 6 views
2

La langue est Java et la question: avoir une application d'écoute sur un port, et cette application est multithread, ayant threads conservés dans un ThreadLocals Set.Can I en ouvrant une socket pour diffuser et transférer un fichier, peut J'ouvre la douille et la livre au fil spécifique? L'application transfère déjà des objets sérialisables spécifiques de l'interface X entre les sockets.Socket Stream écriture

Répondre

1

Je suis d'accord avec Peter. Mais si vous reculez, validez votre conception et décidez que vous en avez vraiment besoin, je pense que vous pouvez le faire comme suit.

Vous devez ajouter à votre protocole toute indication de fil. Disons que vous appelez vos threads 1, 2, 3 etc. Ainsi, chaque commande envoyée par le client doit contenir l'ID de thread auquel elle est dédiée. Le fil d'écoute doit extraire cette valeur et soumettre la tâche à un fil spécifique. Je n'ai aucune idée si vous pouvez le faire en utilisant les pools de threads existants dont vous avez besoin. Mais pas de soucis: si votre pool de threads est simple (c'est-à-dire qu'il ne change pas dynamiquement le nombre de threads), il suffit d'écrire 10 lignes de code pour créer votre propre pool de threads: List<Thread> et threads.add(new Thread()).

Chaque thread doit attendre sur sa propre file d'attente de Runnable s. Quand une nouvelle tâche arrive à Thread #n, créez simplement runnable et placez-la dans la file d'attente correspondante.

+0

Je voulais juste ajouter des âges après, que, à cause de cette idée, j'ai fait ensuite une table où j'ai suivi la communication de fil entre le client/serveur .. – hephestos

0

La façon la plus simple d'avoir un thread de travail est d'utiliser un ExecutorService qui est seul thread (ou une piscine si vous le souhaitez), vous pouvez lui donner des tâches avec

ExecutorService executor = Executors.newSingleThreadExecutor(); 

executor.execute(new Runnable() { ... }); 

executor.shutdown(); 

Je ne sais pas pourquoi vous garder Threads dans les variables ThreadLocal. Il est peut-être temps de prendre du recul par rapport à votre conception et de vous demander si vous pouvez le faire d'une manière plus simple.

+0

Pourquoi tout le monde déteste ThreadLocals de Java? – hephestos