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 :

Singleton en environnement Multithread


Sujet :

Langage Java

  1. #21
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    Citation Envoyé par bulbo Voir le message
    Bon j'arrive après la bagarre, mais je me souviens d'une version qui avait été proposée (par Adiguba je crois bien) lors d'une discussion animée autour du Singleton thread-safe avec lazy loading.

    Ca donnait un truc comme ça et de ce que j'avais compris, cela résolvait parfaitement le problème:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class MaClasse {
     
        private static class InstanceHolder {
     
            private InstanceHolder() {
            }
     
            static MaClasse instance = new MaClasse();
        }
     
        public static MaClasse getInstance() {
            return InstanceHolder.instance;
        }
     
       private MaClasse() { }
     ....

    Si ce n'est pas le cas .. j'espère qu'une bonne âme aura l'amabilité de me détromper .. que j'arrête d'utiliser ça partout

    Bulbo

    C'est d'ailleurs (presque) comme çà qu'es codé le template Netbeans pour un singleton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class MaClasse
    {
     
    	private MaClasse()
    	{
    	}
     
    	public static MaClasse getInstance()
    	{
    		return MaClasseHolder.INSTANCE;
    	}
     
    	private static class MaClasseHolder
    	{
     
    		private static final MaClasse INSTANCE = new MaClasse();
    	}
    }

  2. #22
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 19
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Parce que ce code n'arrivera pas jusqu'au while tant que instance est null
    On ne peux pas avoir un état mémoire ou instance est partiellement initialise (donc non null) et isCompleted a true ?

    Sinon tout le reste est très clair, merci .

  3. #23
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    si, mais dans ce cas là si instance est toujours null, vous allez rentrer dans le if (instance==null) et donc dans le synchronized et donc de toutes facçons vous vous en battez de l'état "isComplete"

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Compteurs en environnement multithread
    Par bartinou dans le forum Langage
    Réponses: 3
    Dernier message: 16/08/2011, 12h38
  2. Réponses: 20
    Dernier message: 09/01/2011, 20h02
  3. Le singleton en environnement clusterisé
    Par FrenchFrogger dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 3
    Dernier message: 07/07/2009, 12h18
  4. Exercice : Environnement multithread
    Par cerby dans le forum C
    Réponses: 3
    Dernier message: 04/01/2008, 00h20
  5. lock de fichiers en environnement multithreadé
    Par Pi2 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 05/09/2007, 19h10

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