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 faire une bonne utilisation


Sujet :

Langage Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Août 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [Singleton] En faire une bonne utilisation
    Bonjour à tous,
    Je suis un petit nouveau sur ce forum et je me permets de vous soumettre mes réflexions sur le singleton.

    Imaginons un cas d'utilisation :
    J'ai un "manager" qui me permet d'accéder à ma BDD pour effectuer des actions.
    Afin de protéger ce fonctionnement en mode multi-Thread, je fais de ce manager un singleton.
    J'ai donc un synchronized sur la méthode statique GetInstance() de ma classe.
    Je fais appel à cette méthode depuis une autre classe de la manière suivante :
    MonManager manager = MonManager.getInstance();

    Ensuite, dans ce manager j'ai une même méthode ajouteSiPasAssez() qui :
    1)lire une valeur en BDD
    2)test si cette valeur est inférieure à X
    3)si c'est le cas, elle ajoute 50

    J'ai donc besoin que cette méthode ne soit accéder que par un seul Thread à la fois.
    Dois-je mettre un synchronized dessus ou alors le fait d'utiliser un singleton suffit ?

    Je fais
    MonManager manager = MonManager.getInstance();
    A quelle moment cet appel rend la main sur le moniteur ?
    Dès que je sors de la méthode getInstance ?

    Et si je fais ça :
    MonManager.getInstance().ajouteSiPasAssez();
    Il rend la main avant ou après avoir fini la méthode ajouteSiPasAssez() ?

  2. #2
    Membre confirmé

    Inscrit en
    Juillet 2002
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 116
    Points : 514
    Points
    514
    Par défaut Re: [Singleton] En faire une bonne utilisation
    Citation Envoyé par Koubi
    Dois-je mettre un synchronized dessus ou alors le fait d'utiliser un singleton suffit ?
    Il faut en effet ajouter un synchronized sur la méthode ajouteSiPasAssez() de ton Manager

    Citation Envoyé par Koubi
    A quelle moment cet appel rend la main sur le moniteur ?
    Dès que je sors de la méthode getInstance ?
    Oui , dés que tu sors de la méthode getInstance(), un autre thread peut executer la méthode getInstance() ...

    Citation Envoyé par Koubi
    Il rend la main avant ou après avoir fini la méthode ajouteSiPasAssez() ?
    Il rend la main avant

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Août 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ok merci beaucoup pour ces explications.
    Donc si je comprends bien, le design pattern singleton me garantie uniquement d'avoir une instance unique de classe : pas du tout que ce singleton ne soit utilisé par un seul Thread en même temps. C'est bien ça ?

    Donc je vais mettre des synchronized sur les méthodes qui doivent être protégées.
    Par contre, si j'ai 2 JVM (2 Tomcat par exemple) qui exécutent mon application, il est possible que 2 Threads (1 de chaque JVM) accède à ma BDD en même temps, même si j'ai protégé par un synchronized.
    Y a t'il une solution ?

  4. #4
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    La solution a un nom : l'isolation des transactions.
    Rendre toutes tes méthodes synchronized n'est pas forcement une bonne idée, réfléchis aux impacts en terme de performance.

  5. #5
    Membre expérimenté
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    Points : 1 512
    Points
    1 512
    Par défaut
    Des verrous en base
    Si ton probleme concerne l'acces à la base, il faut commencer par le gérer au niveau de la base je pense... (ou de l'acces avec les transactions comme dit précédemment)

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Août 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ok. Merci pour ces explications qui me remettent bien les idées en place.

    Question subsidiaire :
    2 Threads récupère une référence vers le même singleton. Les 2 lancent en même temps la même méthode.
    Vont-ils partager le même espace mémoire pour l'exécution de cette méthode ?
    Autrement dit, si j'ai des variables dont la portée est limitée à cette méthode, y a-t-il un risque d'accès concurents sur ces variables entre les Threads ?
    Je pense que non mais j'aimerais bien avoir une confirmation et une explication plus théorique que mon intuition...

  7. #7
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Tu penses bien Chaque thread, heureusement, dispose de sa propre pile d'exécution.

Discussions similaires

  1. [Doctrine] Demande d'information sur une bonne utilisation
    Par anaon dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/02/2009, 12h25
  2. Comment faire une bonne MFC
    Par fabche dans le forum MFC
    Réponses: 4
    Dernier message: 23/05/2008, 11h42
  3. comment faire une bonne défragmentation ?
    Par Pommedeterre dans le forum Windows XP
    Réponses: 28
    Dernier message: 14/03/2008, 10h06
  4. Est-ce une bonne utilisation de fgets ?
    Par clampin dans le forum C
    Réponses: 8
    Dernier message: 04/07/2007, 12h01
  5. [AS2] Conseils pour une bonne utilisation de la POO
    Par guy2004 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 9
    Dernier message: 20/03/2006, 08h24

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