Bonjour à tous,
Je souhaiterais savoir est ce que Synchroniser d'un singleton est obligatoire lorsqu'on développe pour le web, ie déploiement dans environnement multithread.
D'avance merci.
Cdt,
Ram
Bonjour à tous,
Je souhaiterais savoir est ce que Synchroniser d'un singleton est obligatoire lorsqu'on développe pour le web, ie déploiement dans environnement multithread.
D'avance merci.
Cdt,
Ram
Non si tu instancie ton singleton directement avec l'instance static comme
Lors du chargement de la classe la JVM s'assure d'initialiser une seule fois la propriété static
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class Singleton { static final Singleton instance = new Singleton(); public static getInstance() { return instance ; } }
Si tu crées un singleton, il faut s'assurer que chacune de des méthodes modifiant son état interne est Thread-safe. Cela peut se faire soit en utilisant le mot-clé synchronized, soit en utilisant un lock quelconque (voir java.util.concurrent).
Pour t'assurer qu'un singleton est également un vrai singleton et ne bouffe pas des perfs à chaque getInstance(), je te conseille vivement de créer un enum comme ceci :
De cette manières, la création d'un Singleton est Thread-safe et ton singleton est sérializable et ne pourra exister en plusieurs exemplaires, ce qu'un simple getInstance() ne peut empêcher avec un chouia de réflexion.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public enum MonSingleton { INSTANCE; private MonSingleton() { ... } // méthodes }
Partager