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] comment arreter un thread qui execute une methode b


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 29
    Points : 21
    Points
    21
    Par défaut [Thread] comment arreter un thread qui execute une methode b
    Slt,

    desole pour le titre coupe

    ma question : comment arreter un thread qui execute une methode bloquante sans la methode stop ?

    La methode ne reste pas bloque tt le tps mais sa arrive .

    Voila mon probleme.

    J'ai une methode qui peut rester bloque sans faire d'exception, je voudrai pouvoir passer a l'instruction suivante au bout de 2 minutes.

    Pour faire cela j'ai pense a un thread mais meme apres avoir lu la faq et regarde dans un livre je n'ai pas reussi (sans la methode stop ).

    J'ai aussi essaye avec join(1000) mais apres avoir execute tt le code de mon main le programme ne me rends pas la main (le prompt ne re apparait pas)

    Auriez vous une idee ?

    Merci de votre aide

  2. #2
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    sleep n'existe plus ?
    si c le cas je me fais vieux...enfin remarque ce n'est pas ce que tu recherche
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 58
    Points : 70
    Points
    70
    Par défaut
    Pourquoi reste t'elle bloquée ?

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Reponse:

    avec une variable boolean...

    tu l'utilise comme un genre de "signal" qui pourra être envoyé vers la méthode run pour lui dire de stopper... genre comme ça:

    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
     
    class MaClasse implements Runnable{
      private boolean interrupted=false;
     
      public void interrupt(){
        interrupted=true;
      }
     
      public void run(){
        interrupted = false;
     
        while(! interrupted){
          // ton traitement
     
     
          // pour passer la main a un autre thread
          try{
            Thread.sleep(1);
          }catch(InterruptedException e){
            e.printStackTrace();
          }
     
        }
      }
    }
    ça doit marcher....
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    Je ne sais pas pourquoi elle reste bloque et je ne peux pas y toucher car ce n'est pas moi qui l'ai developpe.

  6. #6
    Expert éminent

    Avatar de christopheJ
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 600
    Points : 8 235
    Points
    8 235
    Par défaut
    Si j'ai bien compris ton problème, je viens d'avoir le même.
    Tu as un Thread main (ton programme) qui lance un Thread parallèle (appelons le second).
    Second peut rester bloquer sur une instruction (attente de lecture sur un flux...).
    Dans ton main tu bascules le booleen qui est censé permettre d'arrêter second, mais comme celui-ci est bloqué il ne passe jamais revoir le "while(booleen) faire ...". Du coup à la fin du main, la JVM ne te rend pas le prompt car second est encore actif.
    Si c'est effectivement ton problème, j'ai résolu en mettant second en démon.
    Pour cela tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Thread second= new Thread();
    second.setDaemon(true);
    second.start();
    Du coup la JVM s'arrête lorsque les seuls threads restant sont des threads démons, et tu recupère le prompt.
    Par contre il faut que ta classe "extends Thread" et pas "implements Runnable"

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par ThePills
    Reponse:

    avec une variable boolean...

    tu l'utilise comme un genre de "signal" qui pourra être envoyé vers la méthode run pour lui dire de stopper... genre comme ça:

    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
     
    class MaClasse implements Runnable{
      private boolean interrupted=false;
     
      public void interrupt(){
        interrupted=true;
      }
     
      public void run(){
        interrupted = false;
     
        while(! interrupted){
          // ton traitement
     
     
          // pour passer la main a un autre thread
          try{
            Thread.sleep(1);
          }catch(InterruptedException e){
            e.printStackTrace();
          }
     
        }
      }
    }
    ça doit marcher....
    Je te remercie de ta reponse mais j'ai deja essaye un truc similaire et ca ne marche pas car mon traitement appelle une fonction qui reste bloque donc cela ne passe jamais par le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    try{
            Thread.sleep(1);
    .

  8. #8
    Membre à l'essai
    Inscrit en
    Août 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    Merci christopheJ tu as bien compris mon probleme. Je vais tester ca et je vous tiens au courant

    @+

  9. #9
    Membre à l'essai
    Inscrit en
    Août 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    C'est bon cela marche nikel merci bcp

    @++

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

Discussions similaires

  1. Une classe qui execute une methode
    Par thebarbarius dans le forum Langage
    Réponses: 12
    Dernier message: 31/08/2011, 14h26
  2. comment arreter un thread ?
    Par coax81 dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 28/05/2007, 23h05
  3. comment arreter un thread
    Par Mo_Poly dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 21/03/2007, 02h03
  4. Réponses: 6
    Dernier message: 27/10/2005, 12h58

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