Bonjour à tous,

j'ai une classe chargé de mettre à jour des informations pour un fond, un OPCVM, une SICAV (ça peut très bien être un client ou quelque chose d'autre).

Les méthodes de cette classe, par souci de simplification, sont statiques.

Bref ça doit ressembler à ça :

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
 
public class MaClasse{
 
static public void effectueTraitement(Dao monDao, int idFonds){
 
// quelques traitements prealables 
 
if(faireTraitement1Ou2){
effectueTraitementNo1(monDao, idFonds);
}else{
effectueTraitementNo2(monDao, idFonds);
}
}
 
static private effectueTraitementNo1(Dao monDao, int idFonds){
}
 
static private effectueTraitementNo2(Dao monDao, int idFonds){
}
}
Mon désir est de bloquer le traitement à effectuer pour UN fond, en cas de multithreading (on ne sait jamais).
Donc je ne veut pas ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
static public synchronised void effectueTraitement(Dao monDao, int idFonds){
Mais plutôt ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
static public void effectueTraitement(Dao monDao, int idFonds){
// trouver un objet pour se synchroniser
synchronised (monObjet){ // car "synchronised(idFonds)" ça ne marche pas
// ...
}
}

Alors ?
Comment faire ?