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] probleme de pipe


Sujet :

Concurrence et multi-thread Java

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [THREAD] probleme de pipe
    bonjour, qd je lance le programme qui suit j'ai tjs la meme erreur qui vient: "pipe broken" j'ai l'impression que le "main" s'arrete avant que consumer lise ds le pipe

    quelqu'un peut m'aider???

    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
    class Test
    {
    	public static void main (String args [])
     
      {
     
                  PipedInputStream pin=new PipedInputStream();
              PipedOutputStream pout=new PipedOutputStream(pin);
     
              Producer producer=new Producer(pout);
              Consumer consumer=new Consumer(pin);
     
              producer.start();
              consumer.start();
     
         }

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 29
    Points : 34
    Points
    34
    Par défaut
    Je te confirme que le main s'arrete bien avant les fils. Je suppose que producer et consumer sont des Thread.

    Ta classe Test instancie les deux threads ci-dessus, elle les lance dans deux processus differents et ensuite elle s'arrete. MAis c'est pa sun probléme. Elle peut s'arreter dans deux cas :

    Class Thread

    The exit method of class Runtime has been called and the security manager has permitted the exit operation to take place.

    All threads that are not daemon threads have died, either by returning from the call to the run method or by throwing an exception that propagates beyond the run method.
    A mon avis c'est ton producer qui aprés avoir produit s'arrete sans attendre le consumer. Et là ça peut poser probléme.

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut thread
    qu'est ce que je dois faire alors ??

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 29
    Points : 34
    Points
    34
    Par défaut
    Si c'est ça il faut que le producteur se mette en attente aprés avoir terminé d'écrire. De même que le lecteur doit attendre que le producteur termine d'ecrire.

    Pour resumer, il faut synchroniser tes threads pour ne pas que l'un des deux s'arrete tant que l'autre n'a pas terminé. Et la ça depend de ton code.

    Si tu veux simplement mettre en attente le producteur tu peux essayer ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Consumer consumer=new Consumer(pin); 
    Producer producer=new Producer(pout,consumer);
    puis dans le code de Producer, à la fin de public void run() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void run() {
    ....
    // on attend que l'autre thread se termine
    consumer.join();
    }
    Maintenant, ç'est pas genial puisque seul le producteur attend le lecteur. C'est pas complétement synchronisé. Le lecteur peut se terminer avant que le producteur termine d'ecrire et donc tu perds des données.

  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
    Juste un petit conseil pour éviter une dépendance de classes, défini le constructeur de ton Producer comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Producer(OutputStream out, Thread consumer) {...
    et non

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Producer(OutputStream out, Consumer consumer) {...

  6. #6
    Candidat au Club
    Inscrit en
    Juin 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut thread
    merci beaucoup !!
    ca marche nickel!!!!

    bonne journée

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

Discussions similaires

  1. Probleme de threads et de pipes
    Par Marc san dans le forum C
    Réponses: 7
    Dernier message: 22/02/2006, 22h32
  2. [Thread] Problème de synchronisation
    Par Pe04 dans le forum Concurrence et multi-thread
    Réponses: 12
    Dernier message: 13/12/2005, 12h44
  3. [Thread] Probleme avec mon Timer
    Par Nico66 dans le forum EDT/SwingWorker
    Réponses: 10
    Dernier message: 02/06/2005, 18h10
  4. [Débutant][Threads] Problème de synchronisation
    Par sephile dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 03/01/2005, 00h29
  5. Thread Probleme pour l'arret
    Par Raideman dans le forum C++Builder
    Réponses: 3
    Dernier message: 15/04/2004, 13h17

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