Singleton en environnement Multithread
Bonjour,
J'ai lu ce tutoriel sur le singleton en environnement multithread : http://christophej.developpez.com/tu...n/multithread/
Dedans on trouve notamment l'explication du pourquoi le DCL ne marche pas (possibilite d'avoir un objet partiellement initialise). Je pense avoir trouve une solution a ce problème et je voudrais avoir votre avis concernant cette solution.
L'idée est de rajouter , au niveau de la classe, un boolean (isCompleted) pour savoir si l'exécution du constructeur est fini ou non. Si le constructeur a fini, on retourne l'objet sinon on attend. Voici un code descriptif :
Code:
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
|
import java.util.* ;
class Singleton{
private static Singleton instance;
private List maList;
private static boolean isCompleted = false;
private Singleton(){
maList= new ArrayList();
}
public static Singleton getInstance(){
if (instance==null){
synchronized (Singleton.class){
if(instance==null){
instance=new Singleton();
isCompleted = true;
}
}
} else{
while(!isCompleted){
wait(2000); //ajouter le try catch block. 2000 est un exemple mettre le temps approximatif de construction de l'objet
}
}
return instance;
}
} |
A votre avis est ce que cette méthode marche ou pas ? Si oui qu'en pensez vous de manière général (meilleur que synchroniser toute la méthode getInstance() ?).
Merci d'avance pour vos réponses :).