Java: säikeitä ja synkronointia

Säikeillä voidaan luoda useampia prosesseja suoritettaviksi samanaikaisesti. JVM jakaa näille prosesseille suoritinaikaa tiettyjen yksinkertaisten ehtojen mukaisesti. Säikeillä on käytettävissään 10 eri prioriteettitasoa joiden arvo voi vaihdella käyttöjärjestelmän mukaan. Onkin hyvä tapa käyttää valmiita muuttujia MAX_PRIORITY, NORM_PRIORITY ja MIN_PRIORITY.

Liitteenä olevassa .pdf dokumentissa on lähdekoodi seuraavanlaisesta tilanteesta. Neljä pelaajaa haluavat kukin heittää vuorollaan noppaa ja yrittää saada heittojen summaksi tasan 18. Aluksi luodaan olio itse peliä varten. Pelaajista luodaan jokaisesta oma säikeensä joka yrittää tätä noppapeliä pelata. Noppapeli on synkronoitu, joten jos yksi olio jo sitä pelaa joutuvat muut oliot odottamaan vuoroaan.

Pelaajien olio-luokassa on myös totuusarvo valmis jonka setteriä noppapeli käyttää jos pelaaja on saanut heittojensa summaksi 18. Ohjelmasuorituksen tulostus voisi näyttää vaikka seuraavanlaiselta.

--- NoppaPeli kertoo: Nyt peliä pelaa Jaska
--- NoppaPeli KUULUTTAA: Jaska sai summaksi 18
--- NoppaPeli kertoo: Nyt peliä pelaa Pekka
--- NoppaPeli kertoo: Nyt peliä pelaa Liisa
--- NoppaPeli kertoo: Nyt peliä pelaa Maija
--- NoppaPeli KUULUTTAA: Maija sai summaksi 18
--- NoppaPeli kertoo: Nyt peliä pelaa Pekka
--- NoppaPeli KUULUTTAA: Pekka sai summaksi 18
--- NoppaPeli kertoo: Nyt peliä pelaa Liisa
--- NoppaPeli kertoo: Nyt peliä pelaa Liisa
--- NoppaPeli kertoo: Nyt peliä pelaa Liisa
--- NoppaPeli KUULUTTAA: Liisa sai summaksi 18

Esimerkkikoodin voi ladata viereisestä linkistä. SaiePelaajat.java.pdf

Advertisements

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s