J'ai une question concernant le verrouillage doublement vérifié. Prenons l'exemple suivant :
public class Singleton {
private static volatile Singleton instance = null;
public static Singleton getInstance() {
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
return instance ;
}
}
Si j'ai bien compris, le code ci-dessus est la manière correcte de créer une classe Singleton.
Cependant, NetBeans veut que je supprime l'instruction if extérieure, de sorte que cela ressemble à ceci :
public class Singleton {
private static volatile Singleton instance = null;
public static Singleton getInstance() {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
return instance ;
}
}
La seule différence entre ces deux extraits est que dans le second exemple, le code se retrouve toujours dans le bloc synchronisé, alors que dans le premier, il ne le fait pas. Pourquoi devrais-je écouter NetBeans et supprimer l'instruction if extérieure ? Il devrait être préférable d'éviter le verrouillage.