Vous êtes développeur J2ee vous aussi ? Débutant ?

Vos singletons ressemblent étrangement à ceci ?

class Singleton
 {
   private static Singleton instance;
 
   private Singleton()
   {
     // .....
   }
 
   public static Singleton getInstance()
   {
     if (instance == null)  
       instance = new Singleton();
     return instance;
   }
 }

Vous n'avez peut être pas détecté les problématiques éventuels que peut poser cette solution lorsque l'application est fortement sollicitée ... La méthode getInstance() étant statique, il est donc très fortement conseillé d'utilisé une synchronisation sur le "instance=new Singleton()" pour éviter les problèmes d'accès concurrents à la ressource.

Voici donc à quoi ce dont vous pensez :

public static Singleton getInstance()
 {
   if (instance == null)
   {
     synchronized(Singleton.class) {
       if (instance == null)  
         instance = new Singleton(); 
     }
   }
   return instance;
 }

Mais cette solution ne résout pas le problème, elle réduit juste fortement la probabilité que le problème se produise ... Voici donc la solution proposée par IBM :

class Singleton
 {
   private static Singleton instance = new Singleton();
 
   private Singleton()
   {
     //...
   }
 
   public static Singleton getInstance()
   {
     return instance;
   }
 }

Cette solution est vraiment tout bête, mais cela évite des pertes de performances sur les méthodes "getInstance()".

Pour plus d'explications, rendez-vous sur le site d'IBM.

  • Check-list Docker : 10 questions à se poser avant de démarrer un projet

    De plus en plus de projets utilisent la conteneurisation comme outil d’accélération du déploiement de systèmes informatiques. Malheureusement ces nouvelles technologies autour de la conteneurisationsont pas sans impacts sur l'architecture de la solution mise en place et quand aux choix à réaliser avant de démarrer un projet. Voici un ensemble de questions que je juge pertinents de se poser avant de démarrer un projet avec des containers Docker. Les containers apportent de nouveaux paradigmes auxquels nous n'avons pas encore suffisamment de reculs pour adopter des réflexes naturels.

1. Le , 22:10 par tellaw
d41d8cd98f00b204e9800998ecf8427e

Excellente solution, je l'ai aussi adopter, car c'est simple, rapide et lisible....

2. Le , 22:38 par Ludovic
d41d8cd98f00b204e9800998ecf8427e

C'est clair, ça évite les double synchronized ...

Le classloader charge toutes les classes séquentiellement, ce qui évite les problèmes d'accès concurrents lors de l'initialisation de l'instance.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.