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 :
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
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);
et mon run() :
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(); }
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
7 public void run() { for (String file : files) { // ligne 99 ... } ... }
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.
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)
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 ?
Partager