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

avec Java Discussion :

Lancer un thread


Sujet :

avec Java

  1. #21
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ça représente quoi ce booléen ? Une notion de succès/échec ? Une notion de traitement terminé, peu importe son statut ?

    D'ailleurs, j'y pense, dans le code je t'ai indiqué, tu peux gérer une notion de timeout (avec countDownLatch.await(30, TimeUnit.SECONDS) par exemple pour avoir un timeout de 30 secondes), et dans ce cas tu peux gérer un booléen pour indiquer que le traitement est bien allé jusqu'au bout, ou que le message n'est jamais arrivé (enfin dans les 30 secondes) (ou gérer ça par exception)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  2. #22
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Pardons, je me suis trompé.
    Dans onMessage, j'ai une autre variable qui est mi à jour, c'est le résultat du traitement.
    Et ce résultat je veut le récupérer avec un getResultat() pour l'inclure dans la suite de mon programme principal

  3. #23
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public void faireTraitements(MessageConsumer receiver) {
    CountDownLatch countDownLatch = new CountDownLatch(1); // on attend la fin de 1 traitement
     
    AtomicReference<Resultat> resultatTraitements = new AtomicReferece<>();
    
    receiver.setMessageListener( message-> {
     
         // traitement message...
     
         resultatTraitements.set(new Resultat(...));
         countDownLatch.countDown(); // le traitement est terminé
     
    });
     
    // traitements...
    try {
       if ( countDownLatch.await(30, TimeUnit.SECONDS) ) { // on attend le message
               Resultat resultat = resultatTraitements.get();
               // autre traitements...
       }
       else {
              // le message n'est pas arrivé au bout de 30 secondes d'attente
       }
    }
    catch(InterruptedException e){
      //...
    }
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #24
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    pas besoin de tout ça pour attendre un message. Vous ête occupés de vous compliquer le bourrichon là. Une queue jms ça peux travailler pas listener (asynchrone) ou par receive (synchrone). Là vous êtes occupé d'utiliser le mode asynchrone et essayer de trouver un moyen de le rendre synchrone

    Si tu a besoin d'avoir traité ton message pour continuer, remplace ton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void lireMessage(){
    //Connexion au serveur activeMQ
    receiver.setMessageListener(this); // Permet d'appeler la méthode onMessage
    }
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void lireMessage(){
    //Connexion au serveur activeMQ
    Message message = receiver.receive(); // Attends jusqu'à recevoir un message ou un timeout
    traiter(message);
    }

    ainsi quand tu sortira de lireMessage, le message aura été traité.

  5. #25
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Le traitement du message est effectué par la méthode onMessage qui est appelé grâce à setMessageListener

  6. #26
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ca je l'avais compris, je dis justement que c'est ce qu'il ne faut pas faire dans ton cas.

  7. #27
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [...]
    Message message = receiver.receive(); // Attends jusqu'à recevoir un message ou un timeout
    [...]
    }
    C'est sûr que s'il y a une méthode bloquante, c'est bien plus simple (je ne connais pas du tout ActiveMQ et son API, ceci explique cela).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #28
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Et je souhaite rester sur l'utilisation de ma méthode onMessage

  9. #29
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    il y a un besoin particulier? Parce que tu va vraiment te compliquer là vie entre: devoir attendre sur un Semaphore qu'un message soit traiter, la possibilité que non pas 1 mais 2 messages soient traité avant que tu ne reprenne la main, le risque que d'autre messages soient traités pendant que tu fais le reste de ton code, tu va devoir sortir une bonne grosse artillerie de code de synchronization.

  10. #30
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Pour l'instant je me concentre sur le fait qu'il y a un seul message et non deux et qu'il soient traiter tout seul, qu'il y en ait pas d'autre pendant mon traitement

  11. #31
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par totot Voir le message
    Pour l'instant je me concentre sur le fait qu'il y a un seul message et non deux et qu'il soient traiter tout seul, qu'il y en ait pas d'autre pendant mon traitement
    Ouais, mais ça c'est pas la vraie vie. Tu ne peux pas garantir ça avec jms.

Discussions similaires

  1. lancer un thread dans un thread
    Par andromeda dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 27/07/2007, 23h29
  2. Lancer un Thread
    Par abbd dans le forum C++/CLI
    Réponses: 3
    Dernier message: 19/07/2007, 18h21
  3. Lancer 2 thread consecutif.
    Par lil_k123 dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 18/04/2007, 12h38
  4. [VC++] Comment lancer un Thread
    Par ksoft dans le forum MFC
    Réponses: 5
    Dernier message: 30/05/2006, 14h19
  5. [Thread] Lancer un thread puis l'arrêter
    Par GLDavid dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 16/02/2006, 18h09

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