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

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