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 }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager