Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Trådsynkronisering | Grunnleggende om Multitråding
Multitråding i Java

bookTrådsynkronisering

Synkroniserte metoder og blokker

Synkroniserte metoder og blokker i Java forhindrer at flere tråder får tilgang til den samme ressursen samtidig. Dette bidrar til å unngå problemer som datarace, hvor flere tråder forsøker å endre en delt ressurs på samme tid.

Virkelighetseksempel: Tenk deg et lager med én inngang og utgang. Hvis flere personer prøver å bruke samme dør samtidig, kan det oppstå kaos. Synkronisering i programmering fungerer som en kontrollør ved døren, som kun slipper én person gjennom av gangen for å forhindre kollisjoner.

Synkroniserte metoder

Når en metode erklæres med nøkkelordet synchronized, låses automatisk objektet metoden tilhører under hele utførelsen av metoden.

Kodeeksempel

Main.java

Main.java

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

I dette eksemplet er increment()-metoden synkronisert, noe som betyr at kun én tråd kan utføre denne metoden om gangen.

Synkroniserte blokker

Synkroniserte blokker lar deg synkronisere kun en spesifikk del av en metode, noe som er nyttig hvis du bare ønsker å synkronisere en bestemt del av koden.

Kodeeksempel

Main.java

Main.java

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

I dette eksemplet er det kun koden inne i synchronized(this) som er synkronisert, noe som forbedrer ytelsen dersom hele metoden ikke trenger synkronisering.

Note
Merk

I synchronized(this)-blokken betyr nøkkelordet this at kodeblokken er synkronisert på nåværende instans av objektet, spesifikt på objektet som denne metoden kalles for.

Objektmonitorer

Når en tråd tilegner seg en objektmonitor, får den eksklusiv tilgang til synkroniserte metoder eller blokker for det aktuelle objektet. Andre tråder som forsøker å få tilgang til synkroniserte metoder eller blokker for det samme objektet, vil bli blokkert til monitoren blir frigitt.

Metoder wait(), notify(), notifyAll()

Metoden wait() brukes til å suspendere utførelsen av den nåværende tråden og frigjøre ressursene den benytter, inntil en annen tråd kaller notify() eller notifyAll() for det samme monitorobjektet.

Metodene notify() og notifyAll() brukes til å gjenoppta utførelsen av én eller alle tråder som er blokkert på et monitorobjekt.

Note
Merk

Metodene wait(), notify() og notifyAll() må kalles inne i en synkronisert blokk som er tilknyttet det samme monitorobjektet som den ventende tråden, for å sikre korrekt synkronisering.

I neste kapittel skal vi utforske hva som kan skje hvis du ikke bruker synkronisering.

1. Hva gjør nøkkelordet synchronized i Java?

2. Hvordan fungerer objektmonitoren i Java?

question mark

Hva gjør nøkkelordet synchronized i Java?

Select the correct answer

question mark

Hvordan fungerer objektmonitoren i Java?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 4

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Awesome!

Completion rate improved to 3.33

bookTrådsynkronisering

Sveip for å vise menyen

Synkroniserte metoder og blokker

Synkroniserte metoder og blokker i Java forhindrer at flere tråder får tilgang til den samme ressursen samtidig. Dette bidrar til å unngå problemer som datarace, hvor flere tråder forsøker å endre en delt ressurs på samme tid.

Virkelighetseksempel: Tenk deg et lager med én inngang og utgang. Hvis flere personer prøver å bruke samme dør samtidig, kan det oppstå kaos. Synkronisering i programmering fungerer som en kontrollør ved døren, som kun slipper én person gjennom av gangen for å forhindre kollisjoner.

Synkroniserte metoder

Når en metode erklæres med nøkkelordet synchronized, låses automatisk objektet metoden tilhører under hele utførelsen av metoden.

Kodeeksempel

Main.java

Main.java

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

I dette eksemplet er increment()-metoden synkronisert, noe som betyr at kun én tråd kan utføre denne metoden om gangen.

Synkroniserte blokker

Synkroniserte blokker lar deg synkronisere kun en spesifikk del av en metode, noe som er nyttig hvis du bare ønsker å synkronisere en bestemt del av koden.

Kodeeksempel

Main.java

Main.java

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

I dette eksemplet er det kun koden inne i synchronized(this) som er synkronisert, noe som forbedrer ytelsen dersom hele metoden ikke trenger synkronisering.

Note
Merk

I synchronized(this)-blokken betyr nøkkelordet this at kodeblokken er synkronisert på nåværende instans av objektet, spesifikt på objektet som denne metoden kalles for.

Objektmonitorer

Når en tråd tilegner seg en objektmonitor, får den eksklusiv tilgang til synkroniserte metoder eller blokker for det aktuelle objektet. Andre tråder som forsøker å få tilgang til synkroniserte metoder eller blokker for det samme objektet, vil bli blokkert til monitoren blir frigitt.

Metoder wait(), notify(), notifyAll()

Metoden wait() brukes til å suspendere utførelsen av den nåværende tråden og frigjøre ressursene den benytter, inntil en annen tråd kaller notify() eller notifyAll() for det samme monitorobjektet.

Metodene notify() og notifyAll() brukes til å gjenoppta utførelsen av én eller alle tråder som er blokkert på et monitorobjekt.

Note
Merk

Metodene wait(), notify() og notifyAll() må kalles inne i en synkronisert blokk som er tilknyttet det samme monitorobjektet som den ventende tråden, for å sikre korrekt synkronisering.

I neste kapittel skal vi utforske hva som kan skje hvis du ikke bruker synkronisering.

1. Hva gjør nøkkelordet synchronized i Java?

2. Hvordan fungerer objektmonitoren i Java?

question mark

Hva gjør nøkkelordet synchronized i Java?

Select the correct answer

question mark

Hvordan fungerer objektmonitoren i Java?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 4
some-alt