Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Udfordring: Lock og Condition | Højniveausynkroniseringsmekanismer
Multitrådning i Java

bookUdfordring: Lock og Condition

Opgavebeskrivelse

Forestil dig, at du designer en trafiklyscontroller til et travlt kryds. Trafiklyssystemet består af tre faser: rødt lys, gult lys og grønt lys. Disse faser skal udføres i en bestemt rækkefølge for at sikre sikker og effektiv trafikafvikling.

Din opgave er at implementere metoderne: redLight(), yellowLight() og greenLight(). Disse metoder skal udføres strengt i rækkefølgen for et rigtigt trafiklys: først rødt lys, derefter gult lys og til sidst grønt lys, uanset hvilken rækkefølge trådene kalder dem i.

Krav:

  • Synkronisering: Sikre at metoderne udføres i streng rækkefølge;
  • Multitrådning: Metoderne kan kaldes fra forskellige tråde, men udførelsen skal ske i rækkefølgen: redLight(), yellowLight() og greenLight();
  • Brug Lock og Condition: Anvend Lock til at kontrollere adgangen til delte ressourcer og Condition til at koordinere tråde.
Note
Bemærk

Feltet counter i klassen TaskLockExample er angivet af en grund, du skal tjekke dets værdi i hver metode og afhængigt af hvad der står, beslutte om denne tråd skal startes eller ej.

Du skal også bruge felterne lock og condition til at låse en tråd og bestemme, hvem der bliver første, anden, tredje.

Når du har implementeret metoderne og går videre til Main-klassen og kører dens main-metode, skal du få en output uanset rækkefølgen og hvilken tråd, der kører hvilken metode.

Udskriv også noget til konsollen for at kontrollere, om metoderne udføres i den korrekte rækkefølge.

Note
Bemærk

Du kan også bytte om på starten af trådene (ikke implementeringen selv, men hvor trådens start()-metode kaldes)

Når du er sikker på, at alt fungerer, skal du køre verifikationstestene på stien /src/test/java/TaskLockExampleTest.java.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 2

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

Awesome!

Completion rate improved to 3.33

bookUdfordring: Lock og Condition

Stryg for at vise menuen

Opgavebeskrivelse

Forestil dig, at du designer en trafiklyscontroller til et travlt kryds. Trafiklyssystemet består af tre faser: rødt lys, gult lys og grønt lys. Disse faser skal udføres i en bestemt rækkefølge for at sikre sikker og effektiv trafikafvikling.

Din opgave er at implementere metoderne: redLight(), yellowLight() og greenLight(). Disse metoder skal udføres strengt i rækkefølgen for et rigtigt trafiklys: først rødt lys, derefter gult lys og til sidst grønt lys, uanset hvilken rækkefølge trådene kalder dem i.

Krav:

  • Synkronisering: Sikre at metoderne udføres i streng rækkefølge;
  • Multitrådning: Metoderne kan kaldes fra forskellige tråde, men udførelsen skal ske i rækkefølgen: redLight(), yellowLight() og greenLight();
  • Brug Lock og Condition: Anvend Lock til at kontrollere adgangen til delte ressourcer og Condition til at koordinere tråde.
Note
Bemærk

Feltet counter i klassen TaskLockExample er angivet af en grund, du skal tjekke dets værdi i hver metode og afhængigt af hvad der står, beslutte om denne tråd skal startes eller ej.

Du skal også bruge felterne lock og condition til at låse en tråd og bestemme, hvem der bliver første, anden, tredje.

Når du har implementeret metoderne og går videre til Main-klassen og kører dens main-metode, skal du få en output uanset rækkefølgen og hvilken tråd, der kører hvilken metode.

Udskriv også noget til konsollen for at kontrollere, om metoderne udføres i den korrekte rækkefølge.

Note
Bemærk

Du kan også bytte om på starten af trådene (ikke implementeringen selv, men hvor trådens start()-metode kaldes)

Når du er sikker på, at alt fungerer, skal du køre verifikationstestene på stien /src/test/java/TaskLockExampleTest.java.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 2
some-alt