Bonjour,
j'ai un probleme.
J'ai construit un graphe où chaque noeud est composé d'un thread.
Quand un thread est appelé il execute son code interne et ensuite trouve les thread qui le suive dans le graphe. Il ecrit dans un tampon le nom du thread qui le suit, ainsi l'enseble des thread cherche dans le tampon leur nom pour pouvoir s'executer.
ça marche bien jusqu'au moment où un thread est appelé pour la seconde fois, dans ce cas la il ne trouve pas ses éléments suivants. Je ne vois pas du tout d'ou peut venir ce probleme.
Si quelqun peut m'aider voici le code:
le run d'un thread:
et les fonctions synchonized:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 public void run() { try { int r = (int)(Math.random() * 100); System.out.println("r = "+r); sleep(r); } catch(InterruptedException e) { e.printStackTrace(); } while(true) { //System.out.println(nomproc); boolean rg = grp.lireCommunicationExterne(nomproc);/*ca va retourner une liste*/ if(rg) { niveau2++; for(int i = 0 ; i < niveau2 ; i++)System.out.print(" "); System.out.println("on est dans le processus "+nomproc); //communicationInterne(initial); grp.ecrireCommunicationExterne(nomproc);/*ecrit les suivant dans le tampon...*/ } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 public synchronized void ecrireCommunicationExterne(String nom) {//System.out.println("tintamarre = " + available); while(available == true) { try { wait(); } catch(InterruptedException e) { e.printStackTrace(); } } /*on écrit les suivants* */ //System.out.println("tintamarre"); ArrayList suiv = rechercheSuivant(nom); System.out.print("les suivants sont "); for(int i = 0 ; i< suiv.size() ; i++) { int j = Integer.parseInt((String)suiv.get(i)); tampon[i] = (String)tableid.get(j); System.out.println(tampon[i]); } available = true; notifyAll(); } public synchronized boolean lireCommunicationExterne(String mot) { while(available == false) { try { wait(); } catch(InterruptedException e) { e.printStackTrace(); } } available = false; notifyAll(); for (int i = 0 ; i < tampon.length ; i++) { //System.out.println("tampon[i] = "+tampon[i]+" mot = "+mot); if(tampon[i]!= null && tampon[i].equals(mot)) { //tampon[i]= null; tampon = new String[100]; return true; } } available = true; return false; }
Partager