Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Défi ConcurrentMap | Collections Synchronisées
Multithreading en Java
course content

Contenu du cours

Multithreading en Java

Multithreading en Java

1. Notions de Base du Multithreading
2. Collections Synchronisées
3. Mécanismes de Synchronisation de Haut Niveau
4. Meilleures Pratiques de Multithreading

book
Défi ConcurrentMap

Tâche :

Réalisation d'un système multithreadé de comptabilisation des visites de site.

Description :

Il est nécessaire de créer un programme pour suivre le nombre de visites sur différentes pages du site. Le programme doit fonctionner correctement dans un environnement multithreadé, où plusieurs threads peuvent simultanément augmenter les compteurs de visites pour différentes pages.

Exigences :

  • Utiliser ConcurrentHashMap pour stocker les données sur les visites de pages ;
  • Implémenter une méthode qui incrémente le compteur de visites pour une page donnée. incrementVisit() ;
  • Implémenter une méthode qui retourne le compteur de visites actuel pour une page donnée. getVisitCount() ;
  • Créer plusieurs threads qui vont incrémenter les compteurs de visites simultanément. (Ceci est implémenté dans la classe Main, vous devez comprendre ce qui s'y passe).

Conseils :

  • Utiliser ConcurrentHashMap pour stocker les données où la clé est l'URL de la page et la valeur est le compteur de visites ;
  • Utiliser les méthodes compute() ou merge() pour mettre à jour atomiquement les compteurs dans ConcurrentHashMap.

Vous devez compléter les méthodes dans la classe PageVisitCounterImpl, puis exécuter les tests dans la classe PageVisitCounterTest.

Après avoir complété la tâche avec succès, tous les tests devraient réussir.

Remarque

Après avoir tout fait correctement, vous pouvez essayer de modifier la ligneConcurrentMap est déclaré dans la classe PageVisitCounterImpl et voir ce qui se passe.

C'est-à-dire, vous devez remplacer cette ligne ici par l'implémentation de ConcurrentMap.

java

Main

copy
1
private final ConcurrentMap<String, Integer> visitCounts = new ConcurrentHashMap<>();

Sur celui-ci, avec la réalisation du Map habituel

java

Main

copy
1
private final Map<String, Integer> visitCounts = new HashMap<>();

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 6
We're sorry to hear that something went wrong. What happened?
some-alt