Tres urgent Probleme de Thread

hlimaiem Messages postés 106 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 17 janvier 2007 - 18 avril 2006 à 05:36
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 18 avril 2006 à 06:53
Limaiem heykel
Voici bein j'ai deux thread consecutifs, de facon que le resultat du premier thread et necessaire au fonctionnement du deuxieme thread puisque les resultat fournit par le premier servent comme donnees d'entree de traitement du deuxieme thread. voici le code :
deb[nindex] = new Thread() {// le premier thread qui execute la recherche des liens
public void run() {
try {
Start recherche = new Start();
recherche.debut(liens,in, x);
// recherche.findDetail();
}
catch (Exception ex) {

}

}

};
Thread det = new Thread(){// le deuxieme thread execute le traitement des liens
public void run(){
while (true){
try{
Start rech = new Start();
rech.findDetail();
}
catch (Exception e){

}

}}
};

deb[in].start();
det.start();
deb[in].sleep(10000);
ici j'utilise la methode sleep je met en attente le premier thread pandant 10 seconde le temps que le 2 eme thread effectue ces traitement, mais le probleme de pose la : le temp d'exection du 2 eme thread et variable et je peut y perdre du temp donc ce que je veux:
Comment declancher le deuxieme thread juste apres que le premier a terminer son travail ( la methode join() a la place de sleep n'a pas marcher le premier thread s'execute sans passer la main au deuxieme thread)
Merci enormement votre aide m'est precieuse.

1 réponse

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
18 avril 2006 à 06:53
Quel est l'intérêt de programmer en multi-thread pour faire du séquentiel ??? C'est la première chose qu'on apprend en cours : ca sert à rien, et ca fait perdre du temps (de développement car le multi-thread est plus compliqué à programmer, et pour l'utilisateur car la gestion des threads ralentit l'éxécution).
Si ton but est de faire un bout de code par un thread en parallèle avec un autre bout de code sur un deuxième thread, il faut t'assurer que l'éxécution des 2 bouts de codes soit suffisament longue pour que ce soit véritablement bénéfique (et encore, bénéfique uniquement sur des machines dual-core, multi-proc, ou à la limite, HT).

Je ne vois vraiment pas l'intérêt dans ton cas de passer par des threads : si le thread 2 doit attendre la fin du thread 1 afin de commencer son éxécution, tu y perdras forcément du temps ! (ne serait-ce que pour la gestion des threads par le système).

Sinon, si tu veux vraiment utiliser les threads, apprends d'abord à t'en servir :
Ca sert absolument à rien de faire :

det.start();
deb[in].sleep(10000);

Car comme tu l'a dit, si le thread 1 mets 1 secondes pour s'éxécuter, tu va y perdre 9 secondes ! Si le thread 1 mets 20 secondes à s'éxécuter, le thread 2 commencera avant la fin du thread 1 !!!

Non il faut utiliser les éléments du Java pour synchroniser tes threads : utilise les wait() et les notify() :

Ca doit ressemble à un truc comme cà :

deb[nindex] = new Thread() {// le premier thread qui execute la recherche des liens
public void run() {
Start recherche = new Start();
recherche.debut(liens,in, x);
notifyAll(); // déclenche le prochain thread
}
};

Thread det = new Thread(){
public void run(){
wait(); // attend un notify d'un autre thread
Start rech = new Start();
rech.findDetail();
}
};

deb[in].start();
det.start();

Mais comme je te l'ai déjà dit : t'attends pas à y gagner du temps d'éxécution, bien au contraire !
_
Avant de poster dans le forum,
prière d'aller lire ceci :
http://www.codes-sources.com/reglement.aspx
<s></s>
0
Rejoignez-nous