Les threads en java

Résolu
cs_limalima Messages postés 124 Date d'inscription dimanche 31 août 2008 Statut Membre Dernière intervention 16 décembre 2010 - 2 oct. 2008 à 00:42
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 - 3 oct. 2008 à 08:23
Bonsoir,
je débute en java, je suis sur les threads, mon idé est de calculer les carres de i allant de 1 à 10 000,
dites moi si j'ai bien compris:
comme cette opération va prendre du temps, je dois la partager  entre plusieurs threads, chacun va faire une partie.

c'est pour cela que j'ai creé 10 threads.
et la travail à faire je l'ai mis dans la méthode run().

le problème quand j'execute je comprends rien au résultat:par exemple prquoi le résultat de i*i ne commence pas à i= 10, i=20...
aussi vu mon code je devrai avoir un résultat de ce genre:
le thred numero 5,dont le nom est:Thread-5est en cours
votre resultat: 79566400
le thred numero 2,dont le nom est:Thread-2est en cours
votre resultat: 79210000

je veux dire que l'affichage soit de cette nature:la premiere ligne :le threads numero.... et la deuxième ligne :votre resultat...

donc prquoi moi j'ai tout  dans le desordre et prquoi ça commence pas par i=10?

voila mon code:

public

class Premier_Thread
extends Thread{

int
numero;

public Premier_Thread(
int numero) {

this.
numero =numero;

// TODO Auto-generated constructor stub}

public
void run(){

for (
int i= 0;i<10000;i++){

if (i%10 == 0){System.

out .println(
"le thred numero "+
numero+
","+
"dont le nom est:"+
this .getName()+
"est en cours");

System.

out.println(
"votre resultat: "+i*i);

}

}}

public
static
void main(String[] args){

for(
int j =0;j<10;j++){Premier_Thread tj=

new Premier_Thread(j);tj.start();

}

}

}

Merci de me répondre, même si certains trouvrons mon code nul(désolé je debute en programmation).

 

6 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
2 oct. 2008 à 09:33
salut

i doit varier en fonction du numero du thread.

Le but, c'est de faire calculer des choses differentes a tes 10 threads, or la, ils calculent la meme chose...
3
cs_limalima Messages postés 124 Date d'inscription dimanche 31 août 2008 Statut Membre Dernière intervention 16 décembre 2010
2 oct. 2008 à 19:19
Bonjour,


ah ok, au fait cela veut dire par exemple les threads prennent aléatoirement une partie du calcul sans s'occuper du fait qu'un autre thread a pris la même chose?, du coup ils peuvent calculer la même chose!
3
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
3 oct. 2008 à 08:23
Salut,

Si tu as deux coeurs, et pas trop de logiciels en tâches de fond, tu auras en 2 threads java en cours d'exécution simultanément. De plus, à chaque instruction, et non pas à chaque boucle, le thread utilisant un processeur est susceptible de passer son tour (surtout avec des System.out.print qui sont de (très) très longues instructions.

De plus coucou747 a raison, ce n'est pas parce que tu as crée 10 threads qu'ils vont magiquement se répartir le travail. C'est à toi de coder la répartition des calculs, eh oui : c'est pas magique sinon ça ferait longtemps que Crysis serait optimisé pour les multi-coeurs.

Il existe des patrons de conception (des canvas d'applications en quelque sorte) qui t'aident à faire ça mais il y a plein de façon de le faire seul, à toi de réfléchir. Comme l'a dit coucou747, tu peux par exemple attribuer un nombre sur 10 à chaque thread. Par exemple, le thread 0 fera les carrés de 0, 10, 20, ... le thread 1 les carrés de 1, 11, 21, etc tandis que le thread 9 s'occupera de 9, 19 ,29, ...

Autre chose, quand ce sera fait et que ça marchera tu verras que les calculs seront probablement pas fait dans l'ordre, car les threads n'iront pas exactement à la même vitesse, par exemple 24² pourra être calculé avant 20². Si tu veux que les calculs soient faits dans l'ordre ça va être un peu compliqué il faudra que tu programme un rendez-vous entre les processus -> http://cedric.cnam.fr/~bouzefra/cours/cours_LS/ED_Synchro_TRA_Sol.pdf

Sinon, le fait d'afficher les réponses dans la console perturbe beaucoup l'exécution (si tu les enlèves, tu verras que le calcul se fait instantanément ou presque)
3
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
2 oct. 2008 à 14:06
Salut,

Qu'entends-tu par "dans le désordre"?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_limalima Messages postés 124 Date d'inscription dimanche 31 août 2008 Statut Membre Dernière intervention 16 décembre 2010
2 oct. 2008 à 19:13
Bonjour,
peut etre j'ai compris:quand j'ai  un resultat de ce type, cela veut il dire que c'est le thread 9 qui a calculé 4 résultat?
le thred numero 9,dont le nom est:Thread-9est en cours

votre resultat: 83174400

votre resultat: 80820100

votre resultat: 81360400

votre resultat: 81902500
merci.
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
2 oct. 2008 à 19:38
... la tes threads prennnent TOUS, le calcul ENTIER
0
Rejoignez-nous