Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Haaste: Concurrentmap | Synkronoidut Kokoelmat
Monisäikeisyys Javassa

bookHaaste: Concurrentmap

Tehtävä:

Monisäikeisen kävijälaskentajärjestelmän toteutus.

Kuvaus:

Toteutettava ohjelma, joka seuraa eri sivujen käyntikertojen määrää. Ohjelman tulee toimia oikein monisäikeisessä ympäristössä, jossa useat säikeet voivat samanaikaisesti kasvattaa eri sivujen käyntilaskureita.

Vaatimukset:

  • Käytä ConcurrentHashMap-rakennetta tallentaaksesi tiedot sivukäynneistä;
  • Toteuta metodi, joka kasvattaa tietyn sivun käyntimäärää. incrementVisit();
  • Toteuta metodi, joka palauttaa tietyn sivun nykyisen käyntimäärän. getVisitCount();
  • Luo useita säikeitä, jotka kasvattavat käyntimääriä samanaikaisesti. (Tämä on toteutettu Main-luokassa, sinun tulee selvittää, mitä siellä tapahtuu).

Vinkkejä:

  • Käytä ConcurrentHashMap-rakennetta, jossa avain on sivun URL ja arvo on käyntimäärä;
  • Käytä compute()- tai merge()-metodeja laskureiden atomiseen päivittämiseen ConcurrentHashMap-rakenteessa.

Sinun tulee toteuttaa metodit PageVisitCounterImpl-luokassa ja sen jälkeen suorittaa testit PageVisitCounterTest-luokassa.

Kun olet suorittanut tehtävän onnistuneesti, kaikkien testien tulisi mennä läpi.

Note
Huomio

Kun olet tehnyt kaiken oikein, voit kokeilla muokata riviä, jossa ConcurrentMap määritellään PageVisitCounterImpl-luokassa ja katsoa mitä tapahtuu.

Eli sinun tulee korvata tämä rivi tässä ConcurrentMap-toteutuksella.

Main.java

Main.java

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

Tässä esimerkissä käytetään tavallista Map-toteutusta

Main.java

Main.java

copy
1
private final Map<String, Integer> visitCounts = new HashMap<>();
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 6

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

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

bookHaaste: Concurrentmap

Pyyhkäise näyttääksesi valikon

Tehtävä:

Monisäikeisen kävijälaskentajärjestelmän toteutus.

Kuvaus:

Toteutettava ohjelma, joka seuraa eri sivujen käyntikertojen määrää. Ohjelman tulee toimia oikein monisäikeisessä ympäristössä, jossa useat säikeet voivat samanaikaisesti kasvattaa eri sivujen käyntilaskureita.

Vaatimukset:

  • Käytä ConcurrentHashMap-rakennetta tallentaaksesi tiedot sivukäynneistä;
  • Toteuta metodi, joka kasvattaa tietyn sivun käyntimäärää. incrementVisit();
  • Toteuta metodi, joka palauttaa tietyn sivun nykyisen käyntimäärän. getVisitCount();
  • Luo useita säikeitä, jotka kasvattavat käyntimääriä samanaikaisesti. (Tämä on toteutettu Main-luokassa, sinun tulee selvittää, mitä siellä tapahtuu).

Vinkkejä:

  • Käytä ConcurrentHashMap-rakennetta, jossa avain on sivun URL ja arvo on käyntimäärä;
  • Käytä compute()- tai merge()-metodeja laskureiden atomiseen päivittämiseen ConcurrentHashMap-rakenteessa.

Sinun tulee toteuttaa metodit PageVisitCounterImpl-luokassa ja sen jälkeen suorittaa testit PageVisitCounterTest-luokassa.

Kun olet suorittanut tehtävän onnistuneesti, kaikkien testien tulisi mennä läpi.

Note
Huomio

Kun olet tehnyt kaiken oikein, voit kokeilla muokata riviä, jossa ConcurrentMap määritellään PageVisitCounterImpl-luokassa ja katsoa mitä tapahtuu.

Eli sinun tulee korvata tämä rivi tässä ConcurrentMap-toteutuksella.

Main.java

Main.java

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

Tässä esimerkissä käytetään tavallista Map-toteutusta

Main.java

Main.java

copy
1
private final Map<String, Integer> visitCounts = new HashMap<>();
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 6
some-alt