Bonjour à tous,
voici mon pb :

j'ai une boucle qui tourne très vite, et qui accomplit disons 30 000 itérations.
à l'intérieur de ces boucles, il y a un traitement relativement long ( ~ 300 ms). Ce traitement, il peu sans problème être accompli en parrallèle.
J'ai donc décidé de créer un pool de 100 Thread grace au Framework Executor.

Voici un squelette du code :

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
class{
 
String tmp2;
// ...
// ma methode
Executor exec = Executors.newFiwedThreadPool(100);
for(...){
  tmp2 = "variable qui change";
    exec.execute(new Runnable(){
      public void run(){
          String tmp = tmp2;
          // traitement de tmp ...
       }
   }
}
bon, le pb, c'est tmp2.
cette variable change à chaque tour, et si je ne fait rien, les traitement qui ce déroulent dans les autres threads utiliserons la valeur actuelle de tmp2, et pas la bonne !

et seul les 100 premiers traitement sont bon ...
evidement, c'est parce que les valeurs n'ont pas été cloné ... car le clonage se trouve dans le traitement.
mon pb est-il compréhensible ?

et surtout ... voyez-vous une solutions ...
on pourrait mettre un compteur qui stope la boucle après 100 tour et qui attends la fin des traitements ... mais ce n'est pas très simple à faire ...

merci d'avance.