IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

transfert de données entre threads.


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2011
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 57
    Points : 34
    Points
    34
    Par défaut transfert de données entre threads.
    Bonjour à tous,

    Je suis actuellement dans un impasse. J'essaie de transférer des données récupérées sur mon port série vers un thread qui va les envoyer sur le réseau. Pour ce qui est de la lecture sur le port série et le renvoi sur le réseau, individuellement, il n'y a pas de problème. Le problème est que je n'arrive pas à transférer mes données provenant du thread qui lit le port série vers mon thread qui les traitent et les renvoient. J'ai essayé avec la méthode getter, variables globales etc... J'ai essayé différentes méthodes de lecture dans le thread avec des synchronized, des Piped Reader Writer, des lock unlock. Mais la je sèche complétement.

    Si vous avez des suggestions, je suis tout ouïe.

    Probablement que la conception de mon code est a revoir mais j'aimerais des pistes de réflexion.

    Merci

    Cordialement

  2. #2
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2006
    Messages : 70
    Points : 218
    Points
    218
    Par défaut
    Pour faire court, la meilleure méthode reste l'envois de "messages" d'un thread à l'autre, par le biais de collections spécifique: les files bloquantes.


    L'idée est celle ci:
    - un message est un objet immuable (tous les champs en "final"), qui ne peuvent être initialisés que dans le constructeur.
    - le thread de lecture du port série reçoit des données, et les place dans un "message", qui sera lui même envoyé dans la file bloquante.
    - le thread d'écriture du socket a une boucle infinie, qui attends qu'il y ai au moins un message de prêt dans la file (comme la file est bloquante, si elle est vide, le thread est simplement endormi). Dès qu'un message est prêt, il va pouvoir le lire et effectuer les opérations nécessaires (dans ton cas, envoyer les données sur un socket).


    Ce modèle permet d'être souple vis à vis des temps d’exécution. Si le thread d'envois par socket prend du retard, les messages vont simplement s'accumuler jusqu'à ce qu'il rattrape son retard. Par exemple, le socket est déconnecté, et la reconnexion peut prendre du temps.

    Le fait d'utiliser des objets immuables est important. C'est ce qui permet de d'assurer qu'il n'y au aucun risque de modification du même objet par plus d'un thread en même temps. La synchronisation et la bonne visibilité des états des objets est assuré naturellement par la BlockingQueue (aucun synchronized, ou autre lock à placer soi-même). L'ensemble d'un tel pattern est donc thread-safe.

    Pour les listes bloquantes, voir l'interface https://docs.oracle.com/javase/7/doc...kingQueue.html et l'implémentation https://docs.oracle.com/javase/7/doc...kingDeque.html

    Les méthodes à utiliser sont offer() (non bloquant) pour placer un objet dans la file et take() (bloquant) pour le récupérer dans l'autre thread.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2011
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Merci,

    Je vais regardé ça et je te tiens au courant.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2011
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Ça marche ! Super la solution ! Oh mec, je te ferais bien un gros câlin même si chui pas de ce bord !

    Un gros merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-A] transfert de données entre formulaire
    Par snaxisnake dans le forum VBA Access
    Réponses: 10
    Dernier message: 20/04/2006, 16h48
  2. transfert de données entre deux tables
    Par student007 dans le forum Access
    Réponses: 4
    Dernier message: 23/12/2005, 13h04
  3. [Workgroup] Transfert de données entre 2 pc
    Par portu dans le forum Sécurité
    Réponses: 9
    Dernier message: 20/12/2005, 10h24
  4. Réponses: 5
    Dernier message: 30/11/2005, 16h41
  5. [Designer] Problème de transfert de données entre modul
    Par BILLYPATOU dans le forum Designer
    Réponses: 11
    Dernier message: 09/03/2004, 18h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo