Est-ce que le Thead Safe suivant est java?Can Semaphore peut-il utiliser l'idiome de verrouillage à double vérification en toute sécurité?
public class TestDCL{
private static final Semaphore lock = new Semaphore(1);
private Object instance;
public Object m(){
if(instance == null){
lock.acquire();
if(instance == null){
instance = new Object();
}
lock.release();
}
return instance;
}
}
La solution 'volatile' ne fonctionne que pour J2SE5 et plus. La solution la plus portable (c'est-à-dire sur plusieurs versions de la JVM) consiste toujours à utiliser une classe statique pour effectuer l'initialisation. –