Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Udfordring: Concurrentmap | Synchroniserede Samlinger
Multitrådning i Java

bookUdfordring: Concurrentmap

Opgave:

Implementering af multitrådet system til registrering af sidebesøg.

Beskrivelse:

Der skal udvikles et program til at føre regnskab over antallet af besøg på forskellige sider på websitet. Programmet skal fungere korrekt i et multitrådet miljø, hvor flere tråde samtidigt kan øge besøgstællere for forskellige sider.

Krav:

  • Brug ConcurrentHashMap til at gemme data om sidebesøg;
  • Implementér en metode, der øger besøgstælleren for en given side. incrementVisit();
  • Implementér en metode, der returnerer det aktuelle antal besøg for en given side. getVisitCount();
  • Opret flere tråde, der inkrementerer besøgstællerne samtidigt. (Dette er implementeret i klassen Main, du skal analysere, hvad der sker der).

Tips:

  • Brug ConcurrentHashMap til at gemme data, hvor nøglen er URL'en på siden og værdien er besøgstælleren;
  • Brug metoderne compute() eller merge() til atomar opdatering af tællere i ConcurrentHashMap.

Du skal færdiggøre metoderne i klassen PageVisitCounterImpl, og derefter køre testene i klassen PageVisitCounterTest.

Når du har fuldført opgaven korrekt, skal alle tests bestås.

Note
Bemærk

Når du har gjort alt korrekt, kan du prøve at redigere linjen, hvor ConcurrentMap erklæres i klassen PageVisitCounterImpl og se, hvad der sker.

Det vil sige, at du skal erstatte denne linje her med implementeringen af ConcurrentMap.

Main.java

Main.java

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

I dette tilfælde med implementeringen af den sædvanlige Map

Main.java

Main.java

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

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 6

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

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?

bookUdfordring: Concurrentmap

Stryg for at vise menuen

Opgave:

Implementering af multitrådet system til registrering af sidebesøg.

Beskrivelse:

Der skal udvikles et program til at føre regnskab over antallet af besøg på forskellige sider på websitet. Programmet skal fungere korrekt i et multitrådet miljø, hvor flere tråde samtidigt kan øge besøgstællere for forskellige sider.

Krav:

  • Brug ConcurrentHashMap til at gemme data om sidebesøg;
  • Implementér en metode, der øger besøgstælleren for en given side. incrementVisit();
  • Implementér en metode, der returnerer det aktuelle antal besøg for en given side. getVisitCount();
  • Opret flere tråde, der inkrementerer besøgstællerne samtidigt. (Dette er implementeret i klassen Main, du skal analysere, hvad der sker der).

Tips:

  • Brug ConcurrentHashMap til at gemme data, hvor nøglen er URL'en på siden og værdien er besøgstælleren;
  • Brug metoderne compute() eller merge() til atomar opdatering af tællere i ConcurrentHashMap.

Du skal færdiggøre metoderne i klassen PageVisitCounterImpl, og derefter køre testene i klassen PageVisitCounterTest.

Når du har fuldført opgaven korrekt, skal alle tests bestås.

Note
Bemærk

Når du har gjort alt korrekt, kan du prøve at redigere linjen, hvor ConcurrentMap erklæres i klassen PageVisitCounterImpl og se, hvad der sker.

Det vil sige, at du skal erstatte denne linje her med implementeringen af ConcurrentMap.

Main.java

Main.java

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

I dette tilfælde med implementeringen af den sædvanlige Map

Main.java

Main.java

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

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 6
some-alt