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 :
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
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
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);
}
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
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());
		}
	}
}
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
 
[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]
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.