Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Säikeiden Synkronointi | Monisäikeisyyden Perusteet
Quizzes & Challenges
Quizzes
Challenges
/
Monisäikeisyys Javassa

bookSäikeiden Synkronointi

Synkronoidut metodit ja lohkot

Synkronoidut metodit ja lohkot Javassa estävät useita säikeitä pääsemästä samaan resurssiin samanaikaisesti. Tämä auttaa välttämään ongelmia kuten dataristiriidat, joissa useat säikeet yrittävät muokata jaettua resurssia yhtä aikaa.

Käytännön esimerkki: Kuvittele varasto, jossa on vain yksi sisään- ja uloskäynti. Jos useampi henkilö yrittää käyttää samaa ovea samanaikaisesti, syntyy kaaos. Synkronointi ohjelmoinnissa toimii kuin valvoja ovella, joka päästää vain yhden henkilön kerrallaan estääkseen törmäykset.

Synkronoidut metodit

Kun metodi määritellään synchronized-avainsanalla, se lukitsee automaattisesti olion, johon metodi kuuluu, koko metodin suorituksen ajaksi.

Koodiesimerkki

Main.java

Main.java

copy
123
public synchronized void increment() { //Adding the synchronized count++; }

Tässä esimerkissä increment() metodi on synkronoitu, mikä tarkoittaa, että vain yksi säie voi suorittaa tämän metodin kerrallaan.

Synkronoidut lohkot

Synkronoidut lohkot mahdollistavat vain tietyn osion metodista synkronoinnin, mikä on hyödyllistä, jos haluat synkronoida vain tietyn osan koodista.

Koodiesimerkki

Main.java

Main.java

copy
12345
public void increment() { synchronized(this) { count++; } }

Tässä esimerkissä vain koodi synchronized(this)-lohkon sisällä on synkronoitu, mikä parantaa suorituskykyä, jos koko metodi ei vaadi synkronointia.

Note
Huomio

synchronized(this)-lohkon yhteydessä avainsana this tarkoittaa, että koodilohko synkronoidaan nykyisen olion instanssilla, eli juuri sillä oliolla, jolle tämä metodi kutsutaan.

Olion monitorit

Kun säie hankkii objektimonitorin, se saa yksinoikeuden kyseisen objektin synkronoituun metodiin tai lohkoon. Muut säikeet, jotka yrittävät käyttää saman objektin synkronoituja metodeja tai lohkoja, estetään, kunnes monitori vapautetaan.

Metodit wait(), notify(), notifyAll()

Metodia wait() käytetään keskeyttämään nykyisen säikeen suoritus ja vapauttamaan sen varaamat resurssit, kunnes toinen säie kutsuu notify()- tai notifyAll()-metodia saman monitoriobjektin kohdalla.

Metodeja notify() ja notifyAll() käytetään jatkamaan yhden tai kaikkien monitoriobjektiin estettyjen säikeiden suoritusta.

Note
Huomio

Metodit wait(), notify() ja notifyAll() on kutsuttava synkronoidussa lohkossa, joka liittyy samaan monitoriobjektiin kuin odottava säie, jotta oikea synkronointi varmistetaan.

Seuraavassa luvussa tarkastelemme, mitä voi tapahtua, jos et käytä synkronointia.

1. Mitä synchronized-avainsana tekee Javassa?

2. Miten olion monitori toimii Javassa?

question mark

Mitä synchronized-avainsana tekee Javassa?

Select the correct answer

question mark

Miten olion monitori toimii Javassa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 4

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Suggested prompts:

Can you explain the difference between synchronized methods and synchronized blocks?

How does the object monitor work in Java synchronization?

What are the roles of wait(), notify(), and notifyAll() methods?

Awesome!

Completion rate improved to 3.33

bookSäikeiden Synkronointi

Pyyhkäise näyttääksesi valikon

Synkronoidut metodit ja lohkot

Synkronoidut metodit ja lohkot Javassa estävät useita säikeitä pääsemästä samaan resurssiin samanaikaisesti. Tämä auttaa välttämään ongelmia kuten dataristiriidat, joissa useat säikeet yrittävät muokata jaettua resurssia yhtä aikaa.

Käytännön esimerkki: Kuvittele varasto, jossa on vain yksi sisään- ja uloskäynti. Jos useampi henkilö yrittää käyttää samaa ovea samanaikaisesti, syntyy kaaos. Synkronointi ohjelmoinnissa toimii kuin valvoja ovella, joka päästää vain yhden henkilön kerrallaan estääkseen törmäykset.

Synkronoidut metodit

Kun metodi määritellään synchronized-avainsanalla, se lukitsee automaattisesti olion, johon metodi kuuluu, koko metodin suorituksen ajaksi.

Koodiesimerkki

Main.java

Main.java

copy
123
public synchronized void increment() { //Adding the synchronized count++; }

Tässä esimerkissä increment() metodi on synkronoitu, mikä tarkoittaa, että vain yksi säie voi suorittaa tämän metodin kerrallaan.

Synkronoidut lohkot

Synkronoidut lohkot mahdollistavat vain tietyn osion metodista synkronoinnin, mikä on hyödyllistä, jos haluat synkronoida vain tietyn osan koodista.

Koodiesimerkki

Main.java

Main.java

copy
12345
public void increment() { synchronized(this) { count++; } }

Tässä esimerkissä vain koodi synchronized(this)-lohkon sisällä on synkronoitu, mikä parantaa suorituskykyä, jos koko metodi ei vaadi synkronointia.

Note
Huomio

synchronized(this)-lohkon yhteydessä avainsana this tarkoittaa, että koodilohko synkronoidaan nykyisen olion instanssilla, eli juuri sillä oliolla, jolle tämä metodi kutsutaan.

Olion monitorit

Kun säie hankkii objektimonitorin, se saa yksinoikeuden kyseisen objektin synkronoituun metodiin tai lohkoon. Muut säikeet, jotka yrittävät käyttää saman objektin synkronoituja metodeja tai lohkoja, estetään, kunnes monitori vapautetaan.

Metodit wait(), notify(), notifyAll()

Metodia wait() käytetään keskeyttämään nykyisen säikeen suoritus ja vapauttamaan sen varaamat resurssit, kunnes toinen säie kutsuu notify()- tai notifyAll()-metodia saman monitoriobjektin kohdalla.

Metodeja notify() ja notifyAll() käytetään jatkamaan yhden tai kaikkien monitoriobjektiin estettyjen säikeiden suoritusta.

Note
Huomio

Metodit wait(), notify() ja notifyAll() on kutsuttava synkronoidussa lohkossa, joka liittyy samaan monitoriobjektiin kuin odottava säie, jotta oikea synkronointi varmistetaan.

Seuraavassa luvussa tarkastelemme, mitä voi tapahtua, jos et käytä synkronointia.

1. Mitä synchronized-avainsana tekee Javassa?

2. Miten olion monitori toimii Javassa?

question mark

Mitä synchronized-avainsana tekee Javassa?

Select the correct answer

question mark

Miten olion monitori toimii Javassa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 4
some-alt