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

bookDé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 permettant de 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 concernant 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 nombre actuel de visites pour une page donnée : getVisitCount() ;
  • Créer plusieurs threads qui vont incrémenter simultanément les compteurs de visites. (Ceci est implémenté dans la classe Main, il faut analyser 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 les compteurs de façon atomique dans le ConcurrentHashMap.

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

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

Note
Remarque

Après avoir tout fait correctement, vous pouvez essayer de modifier la ligneConcurrentMap est déclarée dans la classe PageVisitCounterImpl et observer le résultat.

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

Main.java

Main.java

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

Dans ce cas, avec l’implémentation de la Map classique

Main.java

Main.java

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

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Suggested prompts:

Can you show me the code for the PageVisitCounterImpl class?

What do the incrementVisit() and getVisitCount() methods currently look like?

Can you explain how the Main class is creating and running the threads?

Awesome!

Completion rate improved to 3.33

bookDéfi : ConcurrentMap

Glissez pour afficher le menu

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 permettant de 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 concernant 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 nombre actuel de visites pour une page donnée : getVisitCount() ;
  • Créer plusieurs threads qui vont incrémenter simultanément les compteurs de visites. (Ceci est implémenté dans la classe Main, il faut analyser 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 les compteurs de façon atomique dans le ConcurrentHashMap.

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

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

Note
Remarque

Après avoir tout fait correctement, vous pouvez essayer de modifier la ligneConcurrentMap est déclarée dans la classe PageVisitCounterImpl et observer le résultat.

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

Main.java

Main.java

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

Dans ce cas, avec l’implémentation de la Map classique

Main.java

Main.java

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
some-alt