Problème thread ne s'exécute pas

cs_maymouta Messages postés 12 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 27 mai 2011 - 4 mars 2010 à 10:52
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 4 mars 2010 à 11:57
bonjour tout le monde, j'ai un problème lors d'utilisation de thread je ne maitrise pas bien cette notion mais j'en ai besoin, voici le code :
public class tictac implements Runnable {
int x,y;
public void run() {
int a=2; int b=4;
System.out.println("bonjour");
x=a+b;
try{Thread.sleep(1000);
y=(b-a)+x;
}
catch (InterruptedException e){};

}
public tictac(){

}
public void affiche(){
Thread th=new Thread();
th.start();
int somme=(x+y);
System.out.println("la somme est "+somme);

}



public static void main(String argv[]) {

tictac a=new tictac();

a.affiche();
}

}
j'ai besoin de calculer la somme de deux entiers x et y, je lance un thread qui me permet à t=0 de calculer la valeur de x, puis il se met en attente jusqu'à t=1s pour reprendre le calcul de y, alors puisque la somme dépend de x et y alors il faut que le programme principal (la fonction affiche elle même se met en attente jusqu'à ce que le thread lui renvoi les valeurs de x et y pour qu'elle puisse calculer la somme correctement
en exécutant le programme la somme est 0, elle est erronée comme si le thread ne s'exécute pas, alors j'ai besoin de votre aide vraiment je ne le maitrise pas bien ce thread.
merci infiniment

3 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
4 mars 2010 à 11:13
Salut,

Forcément : tu crée ton thread, tu le lance, puis tu fais la somme aussitôt et tu quitte ton programme.

Donc il n'a même pas le temps de se lancer que tu as déjà quitté ton programme !

C'est un problème de synchronisation : il faut bloquer l'exécution de ton programme tant que le threads n'est pas fini (c'est ce qu'on appelle une sémaphore), mais dans ton cas là, je ne vois vraiment pas l'intérêt d'utiliser un thread (si ce n'est d'apprendre à faire des threads !)).

Je te laisse lire le tutorial de sun sur les threads... c'est la moindre des choses quand on programme des threads et qu'on veut comprendre ce qu'on fait.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
cs_maymouta Messages postés 12 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 27 mai 2011
4 mars 2010 à 11:44
merci pour l'aide,
mon code est plus compliquée que cet exemple, mais j'ai un problème lors d'exécution de thread, car c'est la premier fois que j'utilise un tread, et pour expliquer mon problème d'une façon très simple j'ai choisie de donner un exemple simplifié pour trouver des solutions afin de corriger l'état de blocage.
moi j'ai besoin dés que j'appelle la fonction affiche, un thread qui s'exécute pour calculer la valeur de x, puis il se met en attente pendant 1s (pendant cette durée, la fonction affiche doit elle même se mettre en attente jusqu'à se que le thread termine ces instructions après l'attente) et dés que la période d'attente s'achéve je vais que le thread reprend le calcul de valeur de y puis il se met en état d'arrêt pour donner le processeur à la méthode affiche pour qu'elle calcule la somme de deux valeurs x et y.
je ne sais pas mais le thread ne s'exécute pas mais je vais prendre votre conseil sérieusement et je vais essayée de voir les notions de thread, pourtant j'ai passée 4 jours en cherchant une solution mais vraiment c'est le manque de temps qui m'oblige de poser mon problème sur le forum afin de trouver une solution à travers des gents qui ont une bonne expérience dans ce domaine.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
4 mars 2010 à 11:57
Salut,

Ce n'est pas que ton thread ne s'exécute pas, c'est qu'il n'a pas le temps de se lancer : le temps de le lancer, tu as déjà quitté ton programme.

Utilise une sémaphore pour faire ce que tu cherches à faire.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0