Bonjour,

voila, j'ai un peu du mal à me dépatouiller d'un problème de lecteur/écrivain pourtant tout bète...
Voici un bout de code qui recréé mon problème:

La classe ecrivain
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
public class ecrivain extends Thread {
 
	ArrayList<Integer> L;
	int i = 0;
 
	public ecrivain(ArrayList<Integer> L){
		this.L = L;
	}
 
	public void ecrire(){
		L.add(i);
		i++;
	}
 
	public void run(){
		while(true){
			ecrire();
			sleep(50);
		}
	}
}
La classe lecteur
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
public class lecteur extends Thread {
 
ArrayList<Integer> L;
 
	public lecteur(ArrayList<Integer> L){
		this.L = L;
	}
 
	public void lire(){
		Iterator<Integer> it = L.iterator();
		while(it.hasNext()){
			System.out.print(it.next() + " ");
		}
		System.out.print("\n");
	}
 
	public void run(){
		while(true){
			lire();
                          sleep(50);
		}
	}
}
Le Main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
public class Main {
 
 
	public static void main(String[] args) {
 
		ArrayList<Integer> L = new ArrayList<Integer>();
		ecrivain e = new ecrivain(L);
		lecteur l = new lecteur(L);
		e.start();
		l.start();
	}
}
Et bien sur, l'erreur...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 
0 1 2 3 4 5 6 7 8 9 Exception in thread "Thread-1" java.util.ConcurrentModificationException
	at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
	at java.util.AbstractList$Itr.next(Unknown Source)
	at lecteur.lire(lecteur.java:16)
	at lecteur.run(lecteur.java:24)

Comme vous pouvez voir, çà marche au début, mais vers la 20ième itérations çà plante ! (bon là dans cet exemple c'était voulu mais pas dans mon projet...)

Après une 'tite recherche sur le net, j'ai collé des synchronized un peu partout sans aucun résultat...

Pouvez vous me donner un coup de pouce ?

Merci d'avance.