Bonjour,

J'ai un souci bizarre dans un traitement multithreadé. J'obtiens une exception java.util.ConcurrentModificationException quand je le lance plusieurs fois, alors qu'en principe, j'instancie la liste incriminée pour chaque nouveau thread :

Le traitement est lancé à partir d'une servlet :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  ...
  List<String> list = new ArrayList<String>();
  for (OrderPrint op : oi.getPrints()) {
    ...
    list.add(fileO.toString());
    ...
  }
  ...
}
Transmitter transmitter= new Transmitter(order,list);
Mon constructeur dans la classe Transmitter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
protected List<String> files;
protected Thread _thread;
 
public Transmitter(Order order, List<String> files) {
  ...
  this.files = files;
  ...
  _thread = new Thread(this);
  _thread.start();
}
et mon run() :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
public void run() {
  for (String file : files) { // ligne 99
    ...
  }
  ...
}
L'exception est levée sur le for de ma méthode run(), quand il accède à la liste :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
java.util.ConcurrentModificationException
  at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
  at java.util.AbstractList$Itr.next(AbstractList.java:343)
  at com.pixvisio.icontact.print.cewecolor.transfer.Transmitter.run(Transmitter.java:99)
  at java.lang.Thread.run(Thread.java:619)
Comme je l'indiquais plus haut, le traitement est lancé à partir d'une servlet, et l'erreur se produit si je relance cette servlet plusieurs fois.

Configuration :
-Java 6 update 7
-serveur Resin Pro 3.1.6
-système Debian Linux, kernel 2.6.18

Quelqu'un a une idée de qui se passe ?