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 :ccool:.
Cdt,
Ram
Version imprimable
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 :ccool:.
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é staticCode:
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:
1
2
3
4
5
6
7
8 public enum MonSingleton { INSTANCE; private MonSingleton() { ... } // méthodes }