Bonjour,
J'ai une application qui se charge de lire un fichier et ensuite, de ventiler chaque ligne du fichier dans un Thread de traitement en fonction d'un code enregistrement.
fichier :
Mon programme principal boucle donc sur le fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 00001data 00002data 00001data 00002data 00001data 00002data 00001data 00002data 00001data 00002data
Voici le code de ma classe Traitement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // Lire le fichier jusqu'à la fin while(!EOF) { ligne = lireLigneDuFichier(); // Récup le code de la ligne code = ligne.substring(0, 5); // Si le code n'existe pas, on crée un nouveau traitement (Thread) pour ce code si (Hashtable.containtKey(code)) { Hashtable.put(code, new Traitement()); } // On demande au traitement de traiter la ligne lue ((Traitement)Hashtable.get(code)).proceed(ligne); }
Et voici le résultat lorsque je lance mon traitement...
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
22
23
24
25
26
27
28
29 public class Traitement extends Thread { private Ihm ihm; private String id; private int nbLigne; Lot(Ihm ihm, String lot) { super(); this.ihm = ihm; this.id = lot; this.start(); } public void run() { nbLigne = 0; } public void proceed(String ligne) { nbLigne++; ihm.writeln(id + ": [START] " + nbLigne); try { Thread.sleep(500); ihm.writeln(id + ": [STOP] " + nbLigne); } catch(Exception ex) { ihm.writeln(ex.toString()); } } }
J'ai normalement 5 enregistrements pour chaque lot, mais mon compteur d'enregistrement associé à chaque Traitement ne s'incrémente pas bien et je ne comprend pas pourquoi.
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
22
23
24
25 [29/12/2009 17:23:15] [START] [29/12/2009 17:23:15] [INFO] Lot : 00001 [29/12/2009 17:23:15] 00001 : [START] 1 [29/12/2009 17:23:16] 00001 : [STOP] 0 [29/12/2009 17:23:16] [INFO] Lot : 00002 [29/12/2009 17:23:16] 00002 : [START] 1 [29/12/2009 17:23:16] 00002 : [STOP] 0 [29/12/2009 17:23:16] 00001 : [START] 1 [29/12/2009 17:23:17] 00001 : [STOP] 1 [29/12/2009 17:23:17] 00002 : [START] 1 [29/12/2009 17:23:17] 00002 : [STOP] 1 [29/12/2009 17:23:17] 00001 : [START] 2 [29/12/2009 17:23:18] 00001 : [STOP] 2 [29/12/2009 17:23:18] 00002 : [START] 2 [29/12/2009 17:23:18] 00002 : [STOP] 2 [29/12/2009 17:23:18] 00001 : [START] 3 [29/12/2009 17:23:19] 00001 : [STOP] 3 [29/12/2009 17:23:19] 00002 : [START] 3 [29/12/2009 17:23:19] 00002 : [STOP] 3 [29/12/2009 17:23:19] 00001 : [START] 4 [29/12/2009 17:23:20] 00001 : [STOP] 4 [29/12/2009 17:23:20] 00002 : [START] 4 [29/12/2009 17:23:20] 00002 : [STOP] 4 [29/12/2009 17:23:20] [STOP]
Partager