[threads] Problème d'accès concurrent à une liste
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:
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:
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:
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:
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 ?