+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Nouveau Membre du Club
    Inscrit en
    mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : mai 2007
    Messages : 75
    Points : 31
    Points
    31

    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 chevronné
    Inscrit en
    février 2007
    Messages
    572
    Détails du profil
    Informations forums :
    Inscription : février 2007
    Messages : 572
    Points : 645
    Points
    645

    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
    Nouveau Membre du Club
    Inscrit en
    mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : mai 2007
    Messages : 75
    Points : 31
    Points
    31

    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 chevronné
    Inscrit en
    février 2007
    Messages
    572
    Détails du profil
    Informations forums :
    Inscription : février 2007
    Messages : 572
    Points : 645
    Points
    645

    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
    Expert Confirmé
    Avatar de ®om
    Inscrit en
    janvier 2005
    Messages
    2 811
    Détails du profil
    Informations forums :
    Inscription : janvier 2005
    Messages : 2 811
    Points : 3 093
    Points
    3 093

    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
    Nouveau Membre du Club
    Inscrit en
    mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : mai 2007
    Messages : 75
    Points : 31
    Points
    31

    Par défaut

    Ok merci les gars.

    a+

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •