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 :

[Thread] Connaitre la fin d'execution d'un thread


Sujet :

Concurrence et multi-thread Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [Thread] Connaitre la fin d'execution d'un thread
    Bonjour,

    Je suis nouvelle dans la programmation en multi-threading.

    Dans mon application java je lance un thread et je voudrais apres que ce thead ait fini de continuer l'execution une parti du code de mon application.

    Est-ce qu'il y a un moyen de savoir qu'un thread a fini son exection ?

    Ils m'ont dit d'utiliser un listener. Est ce que c'est une bonne solution?
    J"aimerais si c'est possible que quelqu'un m'envoie un petit exemple.

    merci beaucoup.

  2. #2
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while (monThread.isAlive())
    {}
    Tant que ton Thread est en vie, tu ne fais rien...

    Mais je ne vois pas l'intérêt d'instancier un Thread si c'est pour ne rien faire pendant le même temps !
    Autant executer le code de ton Thread dans ton code principal, et cela revient exactement au même...
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

  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
    bonjour,
    il y a plusieurs aspects dans ta question.
    Pour savoir qu'un thread a terminé son exécution, il est possible d'interroger son état via la méthode isAlive(), ce qui t'oblige à garder une référence sur le thread et, surtout, le test est synchrone.
    Maintenant, si tu veux être notifié de la fin du thread juste avant qu'il ne termine son exécution, dans ce cas tu dois effectivement prévoir un mécanisme de notification, par exemple en utilisant le pattern Observer.
    La question qui se pose alors est la suivante : l'exécution du code de l'objet "observeur" doit-elle s'effectuer dans le thread en cours de terminaison ou dans un nouveau thread ?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    peut-etre je me suis exprimé mal..
    En fait, pendant que mon thread est en vie je fait des choses.. mais il y a une methode que je dois executer juste apres la fin du vie de mon thread puisque le fonctionnement de cette methode est dépendant des résultats que le thread va produire.

    Merci d'avance

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monThread.start();
    monThread.join();
    Ce n'est pas le plus simple ?
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    La question qui se pose alors est la suivante : l'exécution du code de l'objet "observeur" doit-elle s'effectuer dans le thread en cours de terminaison ou dans un nouveau thread ?

    la réponse est : dans un nouveau thread.

    Est-ce que vous pouvez m'illustrer ca dans petit xemple?

    merci

  7. #7
    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
    Une implémentation possible à base d'Observer/Observable :
    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
    import java.util.Observable;
    import java.util.Observer;
     
    public class ThreadTerminationObservable extends Observable implements Runnable {
      Thread thread;
     
      public ThreadTerminationObservable(Thread thread) {
        this(thread, null); 
      }
     
      public ThreadTerminationObservable(Thread thread, Observer observer) {
        this.thread = thread;
        if (observer != null) {
          addObserver(observer);
        }
        new Thread(this).start();
      }
     
      public void run() {
        try {
          thread.join();
          setChanged();
          notifyObservers();
        } catch (InterruptedException ex) {
        }
      }
    }

Discussions similaires

  1. [Thread] Attendre la fin ...
    Par phplive dans le forum Langage
    Réponses: 2
    Dernier message: 21/03/2006, 22h29
  2. Réponses: 6
    Dernier message: 27/10/2005, 12h58
  3. Fin d'execution non maitrisée
    Par Bideul dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 25/05/2005, 12h40
  4. Réponses: 5
    Dernier message: 11/03/2005, 16h48
  5. Connaitre le temps d'execution d'un pgm ?
    Par yacinechaouche dans le forum C
    Réponses: 7
    Dernier message: 27/01/2003, 20h57

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