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

Concurrence et multi-thread Java Discussion :

Echange de messages entre 2 threads


Sujet :

Concurrence et multi-thread Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut Echange de messages entre 2 threads
    Bonjour,
    Je pense que la question a déjà été posée de nombreuses fois, mais je n'ai pas trouvé mon bonheur en faisant des recherches.

    Le contexte :
    J'ai un serveur (proxy HTTP) qui sert de passerelle de dialogue entre un téléphone (android) et un logiciel PC
    Ce serveur est découpé en 2 threads : un qui communiquera avec le téléphone, et l'autre avec le logiciel.

    La cinématique est la suivante :
    Le logiciel envoie un message au serveur (via son Thread associé, nommé "ThreadLogiciel"), ce Thread va transmettre le message au Thread associé au téléphone nommé "ThreadPhone", et ce dernier va enfin transmettre le message au téléphone.

    Mon soucis est simplement que je ne sais pas comment faire pour faire passer le message de mon 1er Thread à mon 2nd.

    Pour les codes ci-dessous, inutile de dire que j'ai simplifié pour le topic, toutes les références y sont etc...
    A noter aussi que je ne dois pas changer ma cinématique expliqué ci-dessus

    Classe qui lance les Threads :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class ThreadClient {
        if (condition1) {
            new ThreadLogiciel(server, socket);
        }
        else if (condition2) {
            new ThreadPhone(server, socket);
        }
    }
    1er Thread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class ThreadLogiciel implements Runnable {
    String msgFromClientPart = ""; // Contiendra les différentes parties du message
    String msgFromClientFull = ""; // Message final
     
    // Constructeurs etc...
     
    try {
     
    while ((msgFromClientPart = bufferedReader.readLine()) != null) {
    	if (condition){
    	    threadPhone.setMsgFromThreadLogiciel("blabllabbla");
    	}
    	// Autre traitement
    	} catch (Exception e) {
    		LOG.error("ERREUR - Exception - Erreur dans la lecture du message : " + e);
    		isMsgReceived = false;
    	}
    }
    2eme Thread:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class ThreadPhone implements Runnable {
    String msgFromClientPart = ""; // Contiendra les différentes parties du message
    String msgFromClientFull = ""; // Message final
     
    // Constructeurs etc...
     
    try {
     
    while ((msgFromClientPart = bufferedReader.readLine()) != null) {
    	if (msgFromThreadLogiciel!= null && !msgFromThreadLogiciel.isEmpty()){
    	// Lire le message venant du ThreadLogiciel;
    	}
    	// Autre traitement
    	} catch (Exception e) {
    		LOG.error("ERREUR - Exception - Erreur dans la lecture du message : " + e);
    		isMsgReceived = false;
    	}
    }
    Dans ce cas, j'essaie une variable globale "msgFromThreadLogiciel" dans mon ThreadPhone, et en faisant un "setMsgFromThreadLogiciel" depuis ThreadLogiciel, mais j'ai l'impression que mon ThreadPhone ne réagis pas ...

    Quelqu'un aurait il des idées? J'ai vaguement entendu parlé des Pipe, des "BlockingQueue" mais je n'ai pas réussi à le faire fonctionner ...

    Merci d'avance

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    Problème résolu, tout connement ...

    L'idée était bien la bonne, mais mal implémentée.

    Il faut en fait faire 2 boucles :
    - celle qui y est déja : while ((msgFromClientPart = bufferedReader.readLine()) != null) - Qui attend un message en provenance du téléphone
    - Mais avant celle ci, il faut attendre le message venant du ThreadLogiciel, et donc boucler sur ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (msgFromThreadLogiciel == null || msgFromThreadLogiciel .isEmpty()) {
    			}
    			//Traitement
    Ce qui nous donne, pour notre thread 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    public class ThreadPhone implements Runnable {
    String msgFromClientPart = ""; // Contiendra les différentes parties du message
    String msgFromClientFull = ""; // Message final
     
    // Constructeurs etc...
     
    try {
     while (msgFromThreadLogiciel == null || msgFromThreadLogiciel .isEmpty()) {}
    			//Traitement
    while ((msgFromClientPart = bufferedReader.readLine()) != null) {
    	if (msgFromThreadLogiciel!= null && !msgFromThreadLogiciel.isEmpty()){
    	// Lire le message venant du ThreadLogiciel;
    	}
    	// Autre traitement
    	} catch (Exception e) {
    		LOG.error("ERREUR - Exception - Erreur dans la lecture du message : " + e);
    		isMsgReceived = false;
    	}
    }

  3. #3
    Membre chevronné
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Par défaut
    Bonjour,

    Sinon pour la communication entre Thread il existe la classe PipedInputStream (et pipedOutputStream).

    Il suffit de donner à ton thread qui écrit un pipedOutput et de donner à ton thread qui écoute un pipedInput qui sera lié lors de sa déclaration au pipedOutput.

    La gestion de producteur consommateur est gérée de façon autonome c'est à dire que si par exemple aucun octet n'est disponible dans le pipe le consommateur se bloque.

    A bientôt.
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    Salut,
    Merci bcp pour ta réponse, mais personnellement mon soucis est résolu
    Merci d'avoir répondu quand même, ça aidera surement quelqu'un derrière nous

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

Discussions similaires

  1. echange de messages entre processus Delphi
    Par MrFlunch dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 01/02/2012, 22h14
  2. Comment attendre la fin de Message entre thread
    Par grunk dans le forum Android
    Réponses: 5
    Dernier message: 11/07/2011, 17h01
  3. Réponses: 7
    Dernier message: 21/04/2009, 14h16
  4. Messages entre threads
    Par Casimir33 dans le forum Visual C++
    Réponses: 11
    Dernier message: 25/07/2006, 15h18
  5. message entre dialog box et thread
    Par scorbo dans le forum MFC
    Réponses: 7
    Dernier message: 19/06/2004, 11h01

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