Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Haaste: Lock ja Condition | Korkean Tason Synkronointimekanismit
Monisäikeisyys Javassa

bookHaaste: Lock ja Condition

Tehtävän kuvaus

Kuvittele, että suunnittelet liikennevalojen ohjainta vilkkaaseen risteykseen. Liikennevalojärjestelmä koostuu kolmesta vaiheesta: punainen valo, keltainen valo ja vihreä valo. Näiden vaiheiden on tapahduttava tietyssä järjestyksessä liikenteen turvallisuuden ja sujuvuuden varmistamiseksi.

Tehtävänäsi on toteuttaa metodit: redLight(), yellowLight() ja greenLight(). Näiden metodien on suoritettava täsmälleen oikeassa liikennevalojen järjestyksessä: ensin punainen valo, sitten keltainen valo ja lopuksi vihreä valo, riippumatta siitä, missä järjestyksessä säikeet niitä kutsuvat.

Vaatimukset:

  • Synkronointi: Varmista, että metodit suoritetaan tiukassa järjestyksessä;
  • Monisäikeisyys: Metodeja voidaan kutsua eri säikeistä, mutta suoritusjärjestyksen on oltava: redLight(), yellowLight() ja greenLight();
  • Käytä Lock- ja Condition-rajapintoja: Hyödynnä Lock-luokkaa ja Condition-rajapintaa ja hallitse jaettujen resurssien käyttöä sekä säikeiden välistä koordinointia.
Note
Huomio

counter-kenttä TaskLockExample-luokassa on määritelty syystä; sinun tulee tarkistaa sen arvo jokaisessa metodissa ja päättää sen perusteella, käynnistetäänkö kyseinen säie vai ei.

Sinun tulee myös käyttää lock- ja condition-kenttiä lukitsemaan jokin säie ja päättämään, kuka on ensimmäinen, toinen, kolmas.

Kun olet toteuttanut metodit ja siirtynyt Main-luokkaan sekä suorittanut sen päämetodin, sinun tulisi saada tuloste riippumatta siitä, missä järjestyksessä ja mikä säie suorittaa minkäkin metodin.

Tulosta myös konsoliin jotain tarkistaaksesi, että metodit suoritetaan oikeassa järjestyksessä.

Note
Huomio

Voit myös vaihtaa säikeiden käynnistysjärjestystä (ei toteutusta, vaan kohtaa, jossa säikeen start()-metodia kutsutaan)

Kun olet varma, että kaikki toimii, suorita varmennustestit polussa /src/test/java/TaskLockExampleTest.java.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 2

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Suggested prompts:

Can you explain how to use Lock and Condition to synchronize the traffic light methods?

What should the output look like to confirm the correct order?

Can you give an example of how the threads might call the methods in random order?

Awesome!

Completion rate improved to 3.33

bookHaaste: Lock ja Condition

Pyyhkäise näyttääksesi valikon

Tehtävän kuvaus

Kuvittele, että suunnittelet liikennevalojen ohjainta vilkkaaseen risteykseen. Liikennevalojärjestelmä koostuu kolmesta vaiheesta: punainen valo, keltainen valo ja vihreä valo. Näiden vaiheiden on tapahduttava tietyssä järjestyksessä liikenteen turvallisuuden ja sujuvuuden varmistamiseksi.

Tehtävänäsi on toteuttaa metodit: redLight(), yellowLight() ja greenLight(). Näiden metodien on suoritettava täsmälleen oikeassa liikennevalojen järjestyksessä: ensin punainen valo, sitten keltainen valo ja lopuksi vihreä valo, riippumatta siitä, missä järjestyksessä säikeet niitä kutsuvat.

Vaatimukset:

  • Synkronointi: Varmista, että metodit suoritetaan tiukassa järjestyksessä;
  • Monisäikeisyys: Metodeja voidaan kutsua eri säikeistä, mutta suoritusjärjestyksen on oltava: redLight(), yellowLight() ja greenLight();
  • Käytä Lock- ja Condition-rajapintoja: Hyödynnä Lock-luokkaa ja Condition-rajapintaa ja hallitse jaettujen resurssien käyttöä sekä säikeiden välistä koordinointia.
Note
Huomio

counter-kenttä TaskLockExample-luokassa on määritelty syystä; sinun tulee tarkistaa sen arvo jokaisessa metodissa ja päättää sen perusteella, käynnistetäänkö kyseinen säie vai ei.

Sinun tulee myös käyttää lock- ja condition-kenttiä lukitsemaan jokin säie ja päättämään, kuka on ensimmäinen, toinen, kolmas.

Kun olet toteuttanut metodit ja siirtynyt Main-luokkaan sekä suorittanut sen päämetodin, sinun tulisi saada tuloste riippumatta siitä, missä järjestyksessä ja mikä säie suorittaa minkäkin metodin.

Tulosta myös konsoliin jotain tarkistaaksesi, että metodit suoritetaan oikeassa järjestyksessä.

Note
Huomio

Voit myös vaihtaa säikeiden käynnistysjärjestystä (ei toteutusta, vaan kohtaa, jossa säikeen start()-metodia kutsutaan)

Kun olet varma, että kaikki toimii, suorita varmennustestit polussa /src/test/java/TaskLockExampleTest.java.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 2
some-alt