2009-07-06 7 views
0

On m'a dit que toutes les données sortant sur un flux de sortie (j'utilise tcp/ip dans mon cas) pourraient bloquer. Dans ce cas, je ne voudrais pas interrompre l'application en attendant que les données disparaissent.java comment faire un thread d'expéditeur

J'ai besoin d'un modèle pour ce faire.

Je dois envoyer des objets de message sur ce flux. Je pense que j'ai besoin d'une file d'attente de blocage qui contient ces objets de message. La méthode run() du thread récupère tous les objets de message disponibles et les envoie, alors que true.

Mes questions sont

  1. Y at-il une meilleure façon de le faire qu'une boucle en vraie? Peut-être dans la boucle while while s'il n'y a pas de messages à envoyer, je peux dire au thread de céder/dormir.

  2. Y a-t-il un meilleur modèle à utiliser? Je suis inquiet que si j'ai un certain temps (vrai) dans mon code qu'il mange des cycles de processeur attendant des messages.

S'il vous plaît, quelqu'un qui a de l'expérience avec ceci, laissez-moi savoir s'il y a une meilleure façon à ce sujet.

Merci, JBU

+0

hmm il semble que les deux questions sont les mêmes ... – jbu

Répondre

0

C'est un mécanisme bien, aussi longtemps que la file d'attente est un blocage. Vous céderez automatiquement le processeur en attendant qu'un autre message arrive dans la file d'attente. Si vous lisez la file d'attente de manière non bloquante, vous perdrez beaucoup de temps CPU. Vous devez généralement faire plus d'efforts pour le faire, mais tout dépend du type de file d'attente que vous utilisez.

0

Java a mis en œuvre deux façons de procéder: en bloquant les méthodes (que vous avez déjà traitées) ou en utilisant des méthodes non bloquantes.

Pour la meilleure façon de se rendre à la communication asynchrone en bloquant les méthodes que vous pouvez jeter un oeil à cette réponse: question 1041014

Si vous voulez utiliser des méthodes non-bloquant, vous devez jeter un oeil à la NIO cadre. Il n'est pas particulièrement facile à implémenter au début, car il utilise plusieurs concepts compliqués, mais une fois que vous aurez compris comment gérer les événements de communication, il est assez simple de réaliser des implémentations puissantes. À la fin, vous finirez par utiliser des méthodes de blocage, car le temps CPU est inutile, mais le framework NIO vous permettra de créer une implémentation de communication à un seul thread qui sera très optimale pour les utilisations de CPU et de mémoire.

Jetez un coup d'œil au livre de O'reilly NIO.

Questions connexes