Bonjour,

j'espère que je m'engage dans la bonne voie. En fait j'ai un traitement qui est très long. J'ai réussi à cibler le morceau qui est le plus lent et j'aimerais l'exécuter en multi-thread. Par contre en lisant un peu de doc, je ne fais que m'embrouiller j'ai l'impression.

j'ai donc besoin de vos lumières. Voici "en gros" le code existant. les // indiquent quelle partie je voudrais paralléliser.

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
boucle 1 {

       ObjetType1 obj ...

       ObjetType2[] listeObjetType2 = obj.loadListeType2
       

       boucle 2 {   // boucle for sur listeObjetType2

// début parallèle
                  ObjetType3 o3 = listeObjetType2[i].chargeType3();
                  // hop des traitements (lectures de valeurs sur o3)
                  // ajout des valeurs dans un objet hashmap  (à transformer en hashtable je suppose ??)
                 listeCumulée.add(/* les valeurs que j'ai lues précédemment*/);
                 // si la clé existe déjà, on cumule les valeurs
// fin parallèle
       } // boucle 2

       // traitement sur l'objet listeCumulée et vidage de la liste

} // boucle 1
bon j'espère que c'est clair ...

En fait j'ai deux questions :

1 . comment exécuter un thread par indice de boucle ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
for(...)  //boucle2
new Thread { public void run() { /* mon code à paralléliser */ }};
faut il fermer le thread apres ou c'est automatique.

2 . mon objet listeCumulée (un hashmap pour l'intant) doit il etre transformé en hashtable ? Faut il que j'y accède en synchronised.
Sur cet objet, quand je fais add, je vérifie si la clé existe, si oui, je cumule la valeur existante. Est ce que le multi-thread ne va pas alourdir mon traitement au lieu de l'améliorer ??


merci d'avance et désolé pour la longueur ...


[EDIT] petite question subsidiaire ...
dans ce traitement à paralléliser, lorsque je catch une exception, j'écris dans un fichier de log. Faut il également utiliser le mot clé synchronised ? (je suppose que oui mais bon, je suis un peu embrouillé ... on serait pas lundi matin ?? )