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 :

Arrêter un thread


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 75
    Points : 59
    Points
    59
    Par défaut Arrêter un thread
    Bonjour à tous,

    je débute en programmation avec les threads et j'ai 4 questions simples :

    1) Comment arrêter un thread définitivement et libérer l'espace mémoire
    qu'il a occupé ?

    J'ai vu qu'il y avait interrupted() mais je ne sais pas si ça libère
    la mémoire.

    J'ai vu qu'il y avait aussi stop() et suspend() mais elles sont Deprecated alors je n'ai pas trop envie de les l'utiliser.

    Enfin, j'ai vu qu'il y avait destroy() mais la doc dit : Destroys this thread, without any cleanup. Any monitors it has locked remain locked.
    ce qui m'a l'air risqué.

    2) Comment réactiver un thread qui a été interrompu avec interrupted() ? (la méthode resume() est deprecated)

    3) Si j'ai un thread n°1 qui a lui-même instancié et démarrer un autre thread n°2, est-ce que l'arrêt du thread n°1 va provoquer automatiquement
    l'arrêt du thread n°2 ?

    4) J'ai lu la doc sur les threads démons et je ne comprend pas leur intérêt.
    Quelqu'un pourrait-il me donner un exemple simple qui montre l'intérêt des
    threads démons ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    Je t'invite à lire la FAQ

    Citation Envoyé par adn013
    Bonjour à tous,

    je débute en programmation avec les threads et j'ai 4 questions simples :

    1) Comment arrêter un thread définitivement et libérer l'espace mémoire
    qu'il a occupé ?
    Un thread est arreté lorsqu'il sort de la methode start (ie grosso modo de la methode run).
    Pour la liberation memoire (des objets java), c'est le Garbagge Collector qui s'en occupe.

    Citation Envoyé par adn013
    J'ai vu qu'il y avait interrupted() mais je ne sais pas si ça libère
    la mémoire.
    Si l'exception n'est pas attrapée, on sort de la methode start, le thread s'arrete.

    Citation Envoyé par adn013
    J'ai vu qu'il y avait aussi stop() et suspend() mais elles sont Deprecated alors je n'ai pas trop envie de les l'utiliser.
    c'est bien

    Citation Envoyé par adn013
    Enfin, j'ai vu qu'il y avait destroy() mais la doc dit : Destroys this thread, without any cleanup. Any monitors it has locked remain locked.
    ce qui m'a l'air risqué.
    oui

    Citation Envoyé par adn013
    2) Comment réactiver un thread qui a été interrompu avec interrupted() ? (la méthode resume() est deprecated)
    Regarde dans la FAQ le paragraphe sur pause

    Citation Envoyé par adn013
    3) Si j'ai un thread n°1 qui a lui-même instancié et démarrer un autre thread n°2, est-ce que l'arrêt du thread n°1 va provoquer automatiquement
    l'arrêt du thread n°2 ?
    non

    Citation Envoyé par adn013
    4) J'ai lu la doc sur les threads démons et je ne comprend pas leur intérêt.
    Quelqu'un pourrait-il me donner un exemple simple qui montre l'intérêt des
    threads démons ?
    Le thread du Garbagge Collector est un thread daemon. Il effectue son travail en tache de fond, mais n'empeche pas la sortie du programme.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Merci pour tes réponses.

    Quelle est la différence entre interrupt() et l'utilisation des solutions proposées dans la FAQ au paragraphe Comment terminer un thread sans la méthode stop() ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    La difference, c'est que la methode interrupt() ne lance une exception que sur certains cas (wait, sleep, etc ...), indiqués dans la javadoc.
    En utilisant ce qui est decrit dans la FAQ, tu as plus de précision sur les points d'interruptions de ton thread.

  5. #5
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    La FAQ devrait être mise à jour, car le boolean de interrupt peut très bien être testé avec isInterrupted().
    Donc oublie le code de la FAQ

  6. #6
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Ok merci les gars.

    a+

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

Discussions similaires

  1. Arrêter un thread en python ?
    Par fanou31 dans le forum Général Python
    Réponses: 7
    Dernier message: 23/06/2013, 19h15
  2. Réponses: 2
    Dernier message: 05/10/2006, 18h56
  3. [Thread] arrêter un thread
    Par melvar dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 10/04/2006, 19h06
  4. Réponses: 18
    Dernier message: 06/04/2005, 15h09
  5. Arrêter une Thread brutalement!
    Par Rodrigue dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/01/2004, 22h29

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