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 :

Variable accédée depuis plusieurs classes


Sujet :

Langage Java

  1. #1
    Yux
    Yux est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 105
    Par défaut Variable accédée depuis plusieurs classes
    Bonjour,

    Je cherche à synchroniser les accès à une variable de type HashMap mais depuis plusieurs classes - deux classes qui implémentent la même interface en fait. Le HashMap serait une variable statique d'une troisième classe.

    Existe-t-il en Java une façon de faire cela ? Je n'ai pas l'impression que le mot clé synchronized ou les méthodes du package locks soient utilisables dans ce cas...

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 580
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 580
    Par défaut
    Il vaut mieux que la variable statique en question soit issue de Collections.synchronizedMap(), plutôt qu'une HashMap simple.

    Bien sûr, si tu as besoin d'appeler values() ou keySey() ou entrySet(), il te faut un mécanisme de synchro plus complexe que ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Yux
    Yux est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 105
    Par défaut
    Thelvin, merci pour ta réponse.

    Au bout du compte, j'ai choisi une autre approche : je crée un singleton (service Spring), et le HashMap n'est modifié qu'au sein de deux méthodes, subscribe() et unsubscribe(). Par contre, ces méthodes sont susceptibles d'être appelées par des threads différents.

    Dans la mesure où il n'existe qu'une instance de la classe concernée, je devrais pouvoir me contenter d'utiliser le mot clé synchronized sur les deux méthodes mentionnées, non ?

    Merci pour vos éclaircissements

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 580
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 580
    Par défaut
    Pas forcément. Si une collection est en cours de modification dans un thread, tu ne peux pas non plus la lire dans un autre thread.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre chevronné
    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
    Par défaut
    Je ne vois pas où est ton problème
    Si ta classe déclare une instance static Map alors à chaque fois que tu veux écrire dans la Map faut que tu fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    synchronized(Class3.instanceMap) {
      // traitement..
    }

  6. #6
    Yux
    Yux est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 105
    Par défaut
    Hibour, cela répond effectivement au problème d'origine.

    Thelvin, ok, je n'avais pas vu les choses sous cet angle. Il ne devrait donc pas y avoir d'écritures concurrentes avec synchronized mais pour garantir l'accès en lecture, il vaut mieux utiliser une implémentation thread-safe. Ce qui amène ma dernière question : vaut-il mieux utiliser le HashMap synchronized de l'interface collections ou le concurrent HashMap Java 5 ?

    Merci encore.

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/02/2013, 09h45
  2. Réponses: 4
    Dernier message: 14/10/2009, 10h52
  3. Comment acceder a un variable extérne depuis une classe
    Par the-morpher dans le forum Windows Forms
    Réponses: 7
    Dernier message: 31/03/2009, 14h04
  4. Réponses: 1
    Dernier message: 31/08/2008, 19h04
  5. variable utilisée par plusieurs classes
    Par yasmine* dans le forum Langage
    Réponses: 9
    Dernier message: 08/02/2007, 15h44

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