Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3383 connectés 

 


Dernière réponse
Sujet : [ JAVA ] - Multithreading guru demandé !!
darklord22

Cherrytree a écrit a écrit :

Tu es trop bon darklord22 :jap:  




 
Tu parles ! Déjà que j'ai fait une erreur de syntaxe dans mon post précédent. En fait il faut appliquer la méthode join au thread à vouloir rejoindre. Donc si dans l'objet toto, tu dois attendre le résultat d'un thread t tu dois faire
 
t.join(); // où t est un thread
 
tu peux ajouter un param au join pour spécifier la durée d'attente maximale (en msec).


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
darklord22

Cherrytree a écrit a écrit :

Tu es trop bon darklord22 :jap:  




 
Tu parles ! Déjà que j'ai fait une erreur de syntaxe dans mon post précédent. En fait il faut appliquer la méthode join au thread à vouloir rejoindre. Donc si dans l'objet toto, tu dois attendre le résultat d'un thread t tu dois faire
 
t.join(); // où t est un thread
 
tu peux ajouter un param au join pour spécifier la durée d'attente maximale (en msec).

Cherrytree Tu es trop bon darklord22 :jap:
darklord22 fyi,
 
join() permet à l'objet d'attendre la fin du thread spécifé.
 
En gros dans un thread tu étends l'interface Runnable et tu as la méthode
 
public void run()  
 
Un thread meurt lorsqu'il arrive à la fin de cette méthode run. Si tu veux que les processus s'attendent mutuellement (par exemple ton objet toto doit attendre la fin de ce que le thread t fait, il devra faire:
 
toto.join(t);
//ici t est mort et donc toto peur récupérer le résultat produit par t
Cherrytree Ah ! Mais, c'est facile de trouver un guru : en plus tu connais parfaitement la méthode ! Tu as oublié ? Alors je te montre : http://forum.hardware.fr/recherche.gif  

 

[jfdsdjhfuetppo]--Message édité par Cherrytree--[/jfdsdjhfuetppo]

lorill NouveauThread ob1 = new NouveauThread("Un" );
  NouveauThread ob2 = new NouveauThread("Deux" );
  NouveauThread ob3 = new NouveauThread("Trois" );
 
apres ca, tu as 4 threads qui tournent : le thread principal et ob1, 2, et 3.
 
le thread principal continue sont execution et affiche donc le Fin des threads tout de suite apres.
 
 
Je pensais que les start() faisaient démarrer les threads tout de suite !!  
 
oui, mais le thread principal continue.
 
D'autre part j'ai pas très bien compris le fonctionnement de join(), si quelqu'un pouvait me l'expliquer clairement svp merci !!  
 
 
monthread.join() bloque l'execution du thread en cours jusqu'a ce que monthread termine son execution. Si monthread est mort, join() renvoie tout de suite.
cool_c_raoul Bon j'essaye un peu de comprendre les subtilités du multithreading, mais voici un exemple que je n'ai pas compris:
 
class NouveauThread implements Runnable {
 String nom;
 Thread t;
 
 NouveauThread(String nomthread) {
  nom = nomthread;
  t = new Thread(this,nom);
  System.out.println("Nouveau Thread : " + t);
  t.start();
 }
 
 public void run() {
  try {
   for(int i=5;i>0;i--) {
    System.out.println(nom + " : " + i);
    Thread.sleep(1000);
   }
  } catch (InterruptedException e) {
   System.out.println(nom + " interrompu." );
   }
  System.out.println(nom + " quitté." );
 }
}
 
class DemoJoin {
 
 public static void main(String args[]) {
 
  NouveauThread ob1 = new NouveauThread("Un" );
  NouveauThread ob2 = new NouveauThread("Deux" );
  NouveauThread ob3 = new NouveauThread("Trois" );
 
  System.out.println("Le thread Un est actif : " + ob1.t.isAlive());
  System.out.println("Le thread Deux est actif : " + ob2.t.isAlive());
  System.out.println("Le thread Trois est actif : " + ob3.t.isAlive());
 
  try {
   System.out.println("Fin des threads attendue." );
   ob1.t.join();
   ob2.t.join();
   ob3.t.join();
  } catch (InterruptedException e) {  
   System.out.println("Thread principal interrompu" );
   }
 
  System.out.println("Le thread Un est actif : " + ob1.t.isAlive());
  System.out.println("Le thread Deux est actif : " + ob2.t.isAlive());
  System.out.println("Le thread Trois est actif : " + ob3.t.isAlive());
 
  System.out.println("Sortie du thread principal." );
 }
}

 
et en sortie j'ai ça
http://www.multimania.com/taco2/java.gif  
 
Le premier truc que je comprends pas, c'est pourquoi le message "Fin des threads attendue" apparait aussi tôt ! Je pensais que les start() faisaient démarrer les threads tout de suite !! Quel signal attendent ils pour démarrer ?
 
D'autre part j'ai pas très bien compris le fonctionnement de join(), si quelqu'un pouvait me l'expliquer clairement svp merci !!

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)