Contenu du cours
Multithreading en Java
Multithreading en Java
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()
oumerge()
pour mettre à jour atomiquement les compteurs dansConcurrentHashMap
.
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 ligne où
ConcurrentMap
est déclaré dans la classePageVisitCounterImpl
et voir ce qui se passe.
C'est-à-dire, vous devez remplacer cette ligne ici par l'implémentation de ConcurrentMap
.
Main
private final ConcurrentMap<String, Integer> visitCounts = new ConcurrentHashMap<>();
Sur celui-ci, avec la réalisation du Map
habituel
Main
private final Map<String, Integer> visitCounts = new HashMap<>();
Merci pour vos commentaires !