2010-01-04 11 views
1

Y a-t-il un moyen pour que deux threads d'un même processus puissent communiquer sans connaître l'interface de l'autre?implémentation d'une communication indépendante au sein d'un processus

fondamentalement, un thread est un serveur STOMP, l'autre est un client. ils sont censés communiquer de manière directe (pas via une socket) et il devrait être indépendant de l'implémentation, donc je ne peux pas supposer que l'un ou l'autre des threads attend des messages dans une file d'attente de messages commune. ce que je cherche est une sorte de mécanisme intégré dans Java qui permet aux threads dans le même processus de communiquer.

existe-t-il un tel mécanisme? et sinon, y a-t-il un autre moyen d'aborder cela?

Répondre

3

Vous pouvez utiliser une file d'attente de messages simultanée dans laquelle les unités d'exécution peuvent publier et recevoir des messages. Au lieu de connaître l'interface de thread de l'autre, chaque thread doit maintenant être capable de créer ses propres messages et de comprendre les messages des autres threads. En utilisant une interface distincte pour ces messages, c'est plutôt facile. Et en prime, il existe un large éventail de files d'attente pour l'accès simultané, de sorte que vous pouvez choisir la file d'attente qui correspond le mieux à votre scénario.

0

Eh bien, vous pouvez avoir un troisième thread pour agir comme un forum. Mais alors vous devez espérer que les deux threads peuvent convenir d'un protocole avant la main. Ce serait aussi plutôt lent.

+0

Il ne devrait pas nécessairement être un troisième thread, juste un objet auquel les deux threads ont accès, par ex. une file d'attente de messages/d'événements. – ZoogieZork

+0

bien la partie "espoir" est problématique. essentiellement, un thread est un serveur STOMP, l'autre est un client. ils sont censés communiquer de manière directe (pas via une socket) sans "connaître" l'implémentation de l'autre. donc ce que je cherche est une sorte de mécanisme intégré dans Java qui permet aux threads dans le même processus de communiquer. – user243070

+0

Oui. c'est vrai. Vous devez vous assurer de vérifier et de protéger contre la modification simultanée –

0

Pouvez-vous fournir plus de détails/exemples? Que voulez-vous dire par "communiquer" exactement?

Il y a plusieurs façons que je peux penser pour faire cela, état partagé (global), PipedInputStream/PipedOutputStream etc. Mais les détails dépendront de ce que vous essayez de faire.