|
| MekkA | Posté le 26/08/2005 @ 10:16 |
Astucien
6443 Messages
| Bonjour,
J'aurais besoin de quelques lumières sur Java.
J'ai un programme qui lance plusieurs un nombre variable de threads. Ceux ci s'exécutent et prennent fin d'eux même. Ma question est : comment le processus "père" peut-il détecter la fin de tous les threads lancés ?
|
| |
| |
| Publicité |
|
|
| breizhbugs | Posté le 26/08/2005 à 10:56 |
Astucien
3001 Messages
| SAlut,
Ben en consultant la doc, j'ai remarquer une methode getState() de la classe Thread qui renvoie TERMINATED ( http://download.java.net/jdk6/docs/api/java/lang/Thread.State.html ) lorsque le thread a fini.
Donc dans le programme principale tu fais une boucle:
class HelloWorld extends Thread
{
__int delai;
__String msgnom;
__public HelloWorld(int d,String n)
__{
____delai=d;msgnom="Je m'appelle "+n;
__}
__public void run()
__{
____System.out.println(msgnom+" et je dormirai au moins "+delai+" sec.");
____try{sleep(1000*delai);}
____catch(InterruptedException e) {};
____System.out.println(msgnom+" et je vous quitte.");
__}
}
public class test
{
__public static void main(String[] args)
__{
____HelloWorld[] T=new HelloWorld[5];
____T[0]=new HelloWorld(2,"ALPHA");
____T[1]=new HelloWorld(3,"BETA");
____T[2]=new HelloWorld(5,"GAMMA");
____T[3]=new HelloWorld(1,"DELTA");
____T[4]=new HelloWorld(4,"EPSILON");
____for(int i=0;i<5;i++)
____{
______T[i].start();
____}
____boolean pasfini=true;
____while (pasfini)
____{
______// on attends...
______System.out.println("Le pere attends...");
______pasfini = false;
______for(int i=0;i<5;i++)
______{
________if (T[i].getState()!=TERMINATED)
__________pasfini = true;
______}
____}
____System.out.println("Le pere a fini d'attendre");
__}
}
Modifié par breizhbugs le 26/08/2005 11:03 |
| |
|
| MekkA | Posté le 26/08/2005 à 11:53 |
Astucien
6443 Messages
| Salut breizhbugs,
Nickel ça devrait le faire comme ça, il me manquait ce getState(). Merci bien ! |
| |
|
| Patator | Posté le 27/08/2005 à 13:24 |
Astucien
1883 Messages
| breizhbugs a écrit :
__public void run()
__{
____System.out.println(msgnom+" et je dormirai au moins "+delai+" sec.");
____try{sleep(1000*delai);}
____catch(InterruptedException e) {};
____System.out.println(msgnom+" et je vous quitte.");
__}
}
[SNIP]
____for(int i=0;i<5;i++)
____{
______T[i].start();
____}
Ce ne serait pas plutôt T[i].run()? |
| |
|
| breizhbugs | Posté le 27/08/2005 à 13:33 |
Astucien
3001 Messages
| Le code n'est pas de moi! (trouve sur un site)
d'apres
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html
Run() est la methode a implementer dans la classe Thread
mais Start() est la methode a executer pour lancer le parallelisme
(donc supposition: si dans le parent on lance Thread.run() en fait le contenu de Run()est execute dans le thread du parent comme une fonction normale?? tandis que la methode start() creer un nouveau fil d'execution et fais s'executer le corps de la fonction run dedans???) |
| |
|
| Patator | Posté le 27/08/2005 à 15:41 |
Astucien
1883 Messages
| Oups, en effet.
Start lance la méthode Run implémentée il me semble, maintenant que tu le dis.
Mes cours de Java remontent à loin. [hi][bigsmile] |
| |
|
| breizhbugs | Posté le 27/08/2005 à 16:59 |
Astucien
3001 Messages
| Les miens aussi, mais j'utilise google pour trouver de l'aide! |
| |
|
|
| Haut de la page |