IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Synchroniser un singleton


Sujet :

Langage Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 239
    Points : 173
    Points
    173
    Par défaut Synchroniser un singleton
    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

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Points : 402
    Points
    402
    Par défaut
    Non si tu instancie ton singleton directement avec l'instance static comme
    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 ;
     }
    }
    Lors du chargement de la classe la JVM s'assure d'initialiser une seule fois la propriété static

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    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 :

    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
    }
    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.

Discussions similaires

  1. [debutant]Singleton
    Par bafman dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/01/2004, 15h41
  2. Synchronisation de thread
    Par declencher dans le forum Langage
    Réponses: 2
    Dernier message: 07/01/2004, 10h28
  3. Probleme Synchronisation modem Sagem Fast 800
    Par -PiKo- dans le forum Matériel
    Réponses: 4
    Dernier message: 03/01/2004, 15h36
  4. Synchronisation verticale
    Par hs_dino dans le forum OpenGL
    Réponses: 2
    Dernier message: 28/09/2003, 09h35
  5. Synchronisation de base de données locale/distante Internet
    Par StefC30 dans le forum Développement
    Réponses: 3
    Dernier message: 25/07/2003, 14h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo