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 :

Bloquer le renvoie du resultat d'une méthode jusqu'à excécution de tous les thread


Sujet :

avec Java

  1. #1
    Membre habitué Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Points : 131
    Points
    131
    Par défaut Bloquer le renvoie du resultat d'une méthode jusqu'à excécution de tous les thread
    Bonjour,

    voilà j'ai une méthode qui renvoie un resultat et à l'intérieur je crée à chaque tour de boucle tant que mon tableau (tableau qui contient des objets) n'est pas vide (a chaque fois j'enlève l'élément qui a été traité) un thread qui s'occupe d'appeler une méthode de l'objet concerné et ajoute le résultat à une liste et à la fin je renvoie cette liste de résultat mais le problème c'est que je recois le résultat avant que les thread ne termine ce qu'ils font...

    Merci beaucoup pour votre aide...

  2. #2
    Membre habitué
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    Bonjour,

    d'aprés mes quelques souvenirs de TP java sur les threads, pour régler ce genre de probléme, on peut utiliser des systéme de jetons.

    Quelque chose comme un compteur de jetons dans ton threads principal
    tu ajoute un jeton à chaque thread créé, tu lance tes threads et quand ils se finissent, tu leur fait appeler une méthode LibérerJeton() qui décrémente ton compteur et teste si le compteur est à 0, si oui tu renvois le résultat, sinon tu attends encore.

    J'espére que c'est clair et que je ne raconte pas de bétise

  3. #3
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Sinon, tu gardes les références des threads créés à l'intérieur de la boucle et, en sortie de boucle, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (Thread thread : listeThreads) {
       thread.join();
    }

  4. #4
    Membre habitué Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Points : 131
    Points
    131
    Par défaut
    et que fait cette thread.join()?? merci beaucoup

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 48
    Points
    48
    Par défaut
    La méthode join() permet au Thread courant d'attendre la fin de l'exécution du thread sur lequel la méthode est appelée donc boucler sur chacun des thread de cette manière te permettra d'être sûr que tous les threads sont bien terminés.

  6. #6
    Membre habitué Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Points : 131
    Points
    131
    Par défaut
    Franchement je n'ai pas compris votre solution, vous pouvez me l'illustrer avec un exemple svp? Merci d'avance...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 48
    Points
    48
    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
    public class Example {
        public static void main(String[] args) {
            //Création des threads
            Thread[] threads = new Thread[2];
            threads[0]=new Thread();
            threads[1]=new Thread();
            //lancement des threads
            for (Thread thread : threads) {
                thread.start();
            }
            //attente de la fin de tous les threads
            for (Thread thread : threads) {
                try {
                    thread.join();
                } catch (InterruptedException e) {
                    //TODO manage me
                    e.printStackTrace();
                }
            }
            //ici tout les threads sont terminés 
        }
    }

  8. #8
    Membre habitué Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Points : 131
    Points
    131
    Par défaut
    Mais moi ma méthode run ne fini jamais car je programme une sorte de serveur donc le thread il tourne toujours est ce que tread.join() marche dans ce cas la ?, je ne crois pas que c'est le cas... Merci pour votre aide...

  9. #9
    Membre habitué
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    Donc il te reste encore la solution d'utiliser des jetons comme je le disais plus haut

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

Discussions similaires

  1. Une méthode toString qui appelle tous les objets
    Par Invité dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 28/05/2013, 18h09
  2. mettre en cache le resultat d'une méthode
    Par austin P. dans le forum Spring
    Réponses: 3
    Dernier message: 03/03/2008, 17h06
  3. Réponses: 10
    Dernier message: 10/12/2006, 16h26
  4. Réponses: 3
    Dernier message: 22/05/2006, 10h21

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