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

  FORUM HardWare.fr
  Programmation

  [ JAVA ] - Multithreading guru demandé !!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ JAVA ] - Multithreading guru demandé !!

n°98615
cool_c_rao​ul
Posté le 10-02-2002 à 14:15:30  profilanswer
 

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 !!

mood
Publicité
Posté le 10-02-2002 à 14:15:30  profilanswer
 

n°98619
lorill
Posté le 10-02-2002 à 14:27:45  profilanswer
 

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.

n°98653
Cherrytree
cn=?
Posté le 10-02-2002 à 16:15:40  profilanswer
 

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]

n°98664
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 10-02-2002 à 16:31:57  profilanswer
 

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

n°98687
Cherrytree
cn=?
Posté le 10-02-2002 à 18:09:36  profilanswer
 

Tu es trop bon darklord22 :jap:

n°98692
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 10-02-2002 à 18:43:37  profilanswer
 

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).


---------------
What is popular is not always right, what is right is not always popular :D

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [ JAVA ] - Multithreading guru demandé !!

 

Sujets relatifs
[Java] Problème avec les images[Java] Image
[JAVA] Comment ajouter des ascenceurs a JTextArea ???[JAVA] conférence
[JAVA + SQL] Nb de lignes dans un resultSet[java] le point sur les interfaces graphiques
[Java] JDayChooser[JAVA] débutant files
[Java] détection JRE et auto insall[Java] Interface graphique
Plus de sujets relatifs à : [ JAVA ] - Multithreading guru demandé !!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR