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 :

La methode synchronizedMap ()


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2021
    Messages : 17
    Points : 13
    Points
    13
    Par défaut La methode synchronizedMap ()
    Bonjour,
    j'ai récupéré une application Android à améliore pour réalise mon stage de fin d'études.
    Mais dans une classe J'arrive pas comprendre l'appelé d'une méthode [ Collections.synchronizedMap () ]
    J'ai effectué pas mal de recherche mais sans comprendre vraiment l'utilisation de Collections SynchronizedMap () alors que les cours de développement par plus de ConcurrentHashMap.

    Voici la classe en question :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    package pck.datashare;
     
     
    public class HistoriqueMesuresMaintenanceJukiData {
     
        private static final String TAG = "HistoriqueMesuresMaintenanceJukiData";
        private static Map<String, ArrayList<MesuresMaintenanceJuki>> hashMapMesures = null;
     
        public HistoriqueMesuresMaintenanceJukiData() {
            hashMapMesures = Collections.synchronizedMap(new WeakHashMap<String, ArrayList<MesuresMaintenanceJuki>>());
        }
     
        public static void newHistoriqueMesuresMaintenanceJukiData() {
            hashMapMesures = Collections.synchronizedMap(new WeakHashMap<String, ArrayList<MesuresMaintenanceJuki>>());
        }
     
        public static void clear() {
            hashMapMesures = Collections.synchronizedMap(new WeakHashMap<String, ArrayList<MesuresMaintenanceJuki>>());
        }
     
        public static Map<String, ArrayList<MesuresMaintenanceJuki>> getHashMapMesures() {
            return hashMapMesures;
        }
     
        public static void addMesuresMaintenanceJuki(MesuresMaintenanceJuki mesuresMaintenanceJuki) {
            if (mesuresMaintenanceJuki != null) {
                String libelle = mesuresMaintenanceJuki.getLibelleMesureMaintenanceJuki();
                ArrayList<MesuresMaintenanceJuki> listMesureLibelle = hashMapMesures.get(libelle);
                if (listMesureLibelle == null) {
                    listMesureLibelle = new ArrayList();
                }
                listMesureLibelle.add(mesuresMaintenanceJuki);
                hashMapMesures.put(libelle, listMesureLibelle);
            }
        }
     
        public static void addMesuresMaintenanceJuki(ArrayList<MesuresMaintenanceJuki> listMesuresMaintenanceJuki) {
            if (listMesuresMaintenanceJuki != null) {
                for (MesuresMaintenanceJuki mesuresMaintenanceJuki : listMesuresMaintenanceJuki) {
                    addMesuresMaintenanceJuki(mesuresMaintenanceJuki);
                }
            }
        }
     
    }

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 453
    Points : 883
    Points
    883
    Billets dans le blog
    5
    Par défaut
    On a ici le Design Pattern Decorateur ( https://fr.wikipedia.org/wiki/D%C3%A...xemple_en_Java ).

    Ici, on décore une Map pour la rendre Thread Safe.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2021
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    J'ai regarde le lien sur le Décorateur et j'ai pas vraiment comprit la notion "L'ajout (et la suppression) des responsabilités à un objet dynamiquement au moment de l'exécution". Est-ce-que utilise le décorateur permet de gérer simplement exécution d'un objet dynamiquement exemple dans mon cas l', ArrayList<MesuresMaintenanceJuki> ?

    On décode la map pour l'exécuter dans un thread afin d'exécuter simultanément a un autre thread par exemple?

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 453
    Points : 883
    Points
    883
    Billets dans le blog
    5
    Par défaut
    Par exemple, dans la Map ( https://docs.oracle.com/javase/8/doc.../util/Map.html ) on a la méthode clear.

    Supposons que l'on a le décorateur DecorateurMap.

    On aurait:
    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
     
    public class DecorateurMap<K,V> implements Map<K,V>{
     
        private final Map<K,V> maMap;
     
        public DecorateurMap(Map<K,V> maMap){
            this.maMap = maMap;
        }
     
        @Override
        public synchronized void clear(){
            maMap.clear();
        }
     
    //ect ect
    }
    L'idée est de réimplémenter toutes les méthodes en mettant le mot clé synchronized pour rendre la Map (maMap) thread-safe.
    Je "décore" ma Map.

    La ConcurrentHashMap est une ré-implémentation complète.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2021
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    D'accord j'ai compris merci, donc le principe c'est de décore la map pour la rendre thread Safe, pour pouvoir exécuter son thread en parallèle avec d'autres thread tous en arrière plan.
    Dans mes recherche j'ai vu que la Classe vector est synchronized donc on aurait pas besoin de la décore pour être thread safe?

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 453
    Points : 883
    Points
    883
    Billets dans le blog
    5
    Par défaut
    La classe Vector est effectivement de base Synchronisé ( https://jmdoudoux.developpez.com/cou...#collections-3 ), elle est donc safe-thread. C'est aussi pour ça qu'elle a de moins bonnes performances.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2021
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    D'accord c'est clair maintenant merci beaucoup!
    j'avais une question là je viens de modifier une chose mais j'arrive plus à la remodifier comment avant.

    En fait j'ai cette ligne de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     checkedTextViewNettoyageAxesXYMaintenanceFuji.setOnClickListener(new OnClickListenerCheckedTextMaintenanceFuji(this));
    Le problème c'est qu'à la place de this il y avait la classe MaintenanceFujiActivity en gris et this à coté mais après avoir touché à une touche la classe en gris a disparu partout dans mon application.
    alors que avant sans la classe en gris c'était souligné en rouge.
    Avez-vous une idée pour m'aider.

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 453
    Points : 883
    Points
    883
    Billets dans le blog
    5
    Par défaut
    Là, sans plus d'indication, je ne peux pas t'aider.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2021
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    J'ai pu retrouver et corriger c'était le hint.

Discussions similaires

  1. [JUnit] Pour tester les methodes d'acces à une sgdb
    Par yanis97 dans le forum Tests et Performance
    Réponses: 2
    Dernier message: 15/04/2004, 15h55
  2. [debutant] [servlets] methode init()
    Par be_on_edge dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 01/03/2004, 15h11
  3. [METHODE] -> Détection de virus ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/02/2004, 17h04
  4. Passage de variable par methode post ?
    Par oazar dans le forum Flash
    Réponses: 33
    Dernier message: 16/10/2003, 17h03
  5. Methode de drcherche a l,interieur de basse de donner texte
    Par philippe V dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 03/12/2002, 10h20

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