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] Synchroniser des threads


Sujet :

Concurrence et multi-thread Java

  1. #1
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 854
    Points : 4 765
    Points
    4 765
    Par défaut [Thread] Synchroniser des threads
    Bonjour

    La question fait suite à celle que j'ai écrite ce matin, mais là, un point de langage m'empêche de progresser.
    Je lance un processus avec Runtime.exec() dans un premier thread. Je veux pouvoir récupérer l'output de ce programme. D'après ce que j'ai lu, je dois pouvoir récupérer ça dans un thread séparé. Le problème est de pouvoir bien synchroniser les deux threads, et là, je ne sais pas faire.
    Voici mon code pour le moment :
    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
    28
    29
    30
    31
    32
    33
    34
    35
     
    Thread t = new Thread(){
    			public void run(){
    				String cmd = "scp /home/gldavid/seq.txt gldavid@cluster:~";
    				try{
    					final Process p = Runtime.getRuntime().exec(cmd);
    					Thread t2 = new Thread(){
    						public void run(){
    							try {
    								java.io.InputStream processOutput = p.getInputStream();
    					            byte[] b = new byte[512];
    					            int read;
    					            while ( (read = processOutput.read(b) ) > 0 ) {
    					            	System.out.write(b, 0, read);
    					            }
    					            processOutput.close();
    							}
    							catch(IOException ioe){
    								ioe.printStackTrace();
    							}
    						}
    					};
    					try{
    						synchronized(this) {
    				            this.wait();
    				        }
    					}
    					catch(InterruptedException ie){
    						ie.printStackTrace();
    					}
    					t2.start();
    				}
    				catch(IOException ioe){
    					ioe.printStackTrace();
    				}
    Merci d'avance de votre aide.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  2. #2
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Essaie ici

    Bye

    Fred
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Points : 234
    Points
    234
    Par défaut
    Clarifie ton code, c'est imbuvable Les classes anonymes sont pratiques pour gagner du temps, mais faire des classes anonymes encapsulées, ça n'apporte ni en gain de temps, ni en lisibilité

    A vue de nez, le thread qui récupère l'output du programme ne sert à rien. Lorsque l'application externe sera lancée, elle aura son propre thread. La synchronisation devrait également être inutile. Il suffit de placer read() dans une boucle avec une condition de sortie adéquate pour que le processus continue d'écouter sur la sortie de l'appli externe.

  4. #4
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Points : 250
    Points
    250
    Par défaut
    je n'ai pas lu le code (imbuvable) mais tu ne peux pas passer le process en parametre pour le second Thread ?
    sinon pourquoi veux tu recuperer l'output dans un autre Thread ?

Discussions similaires

  1. synchronisation des threads a l'aide des moniteurs
    Par rdakpapdak dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 10/04/2008, 17h30
  2. synchronisation des thread
    Par gentelmand dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 29/12/2007, 10h06
  3. synchronisation des thread
    Par gentelmand dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 25/12/2007, 23h45
  4. Question sur la synchronisation des threads.
    Par sebastieng dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 07/12/2005, 15h55

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