Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Trådsynkronisering | Grundlæggende om Multithreading
Quizzes & Challenges
Quizzes
Challenges
/
Multitrådning i Java

bookTrådsynkronisering

Synkroniserede Metoder og Blokke

Synkroniserede metoder og blokke i Java forhindrer flere tråde i at få adgang til den samme ressource samtidigt. Dette hjælper med at undgå problemer som data races, hvor flere tråde forsøger at ændre en delt ressource på samme tid.

Virkelighedseksempel: Forestil dig et lager med én indgang og udgang. Hvis flere personer forsøger at bruge den samme dør på én gang, kan det skabe kaos. Synkronisering i programmering fungerer som en kontrollør ved døren, der kun tillader én person at passere ad gangen for at forhindre sammenstød.

Synkroniserede Metoder

Når en metode erklæres med nøgleordet synchronized, låser den automatisk det objekt, som metoden tilhører, under hele metodens udførelse.

Kodeeksempel

Main.java

Main.java

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

I dette eksempel er increment() metoden synkroniseret, hvilket betyder, at kun én tråd kan udføre denne metode ad gangen.

Synkroniserede blokke

Synkroniserede blokke giver mulighed for kun at synkronisere en bestemt sektion af en metode, hvilket er nyttigt, hvis du kun ønsker at synkronisere en specifik del af koden.

Kodeeksempel

Main.java

Main.java

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

I dette eksempel er det kun koden inden for synchronized(this), der er synkroniseret, hvilket forbedrer ydelsen, hvis hele metoden ikke behøver synkronisering.

Note
Bemærk

I synchronized(this)-blokken betyder nøgleordet this, at kodeblokken er synkroniseret på den aktuelle instans af objektet, specifikt på det objekt, som denne metode kaldes for.

Objektmonitorer

Når en tråd erhverver en objektmonitor, opnår den eksklusiv adgang til synkroniserede metoder eller blokke af det pågældende objekt. Andre tråde, der forsøger at få adgang til synkroniserede metoder eller blokke af det samme objekt, vil blive blokeret, indtil monitoren bliver frigivet.

Metoderne wait(), notify(), notifyAll()

Metoden wait() anvendes til at suspendere udførelsen af den aktuelle tråd og frigive de ressourcer, den benytter, indtil en anden tråd kalder metoden notify() eller notifyAll() for det samme monitorobjekt.

Metoderne notify() og notifyAll() anvendes til at genoptage udførelsen af én eller alle tråde, der er blokeret på et monitorobjekt.

Note
Bemærk

Metoderne wait(), notify() og notifyAll() skal kaldes inde i en synkroniseret blok, der er knyttet til det samme monitorobjekt som den ventende tråd, for at sikre korrekt synkronisering.

I det næste kapitel vil vi undersøge, hvad der kan ske, hvis du ikke bruger synkronisering.

1. Hvad gør nøgleordet synchronized i Java?

2. Hvordan fungerer objektmonitoren i Java?

question mark

Hvad gør nøgleordet synchronized i Java?

Select the correct answer

question mark

Hvordan fungerer objektmonitoren i Java?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 4

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

bookTrådsynkronisering

Stryg for at vise menuen

Synkroniserede Metoder og Blokke

Synkroniserede metoder og blokke i Java forhindrer flere tråde i at få adgang til den samme ressource samtidigt. Dette hjælper med at undgå problemer som data races, hvor flere tråde forsøger at ændre en delt ressource på samme tid.

Virkelighedseksempel: Forestil dig et lager med én indgang og udgang. Hvis flere personer forsøger at bruge den samme dør på én gang, kan det skabe kaos. Synkronisering i programmering fungerer som en kontrollør ved døren, der kun tillader én person at passere ad gangen for at forhindre sammenstød.

Synkroniserede Metoder

Når en metode erklæres med nøgleordet synchronized, låser den automatisk det objekt, som metoden tilhører, under hele metodens udførelse.

Kodeeksempel

Main.java

Main.java

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

I dette eksempel er increment() metoden synkroniseret, hvilket betyder, at kun én tråd kan udføre denne metode ad gangen.

Synkroniserede blokke

Synkroniserede blokke giver mulighed for kun at synkronisere en bestemt sektion af en metode, hvilket er nyttigt, hvis du kun ønsker at synkronisere en specifik del af koden.

Kodeeksempel

Main.java

Main.java

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

I dette eksempel er det kun koden inden for synchronized(this), der er synkroniseret, hvilket forbedrer ydelsen, hvis hele metoden ikke behøver synkronisering.

Note
Bemærk

I synchronized(this)-blokken betyder nøgleordet this, at kodeblokken er synkroniseret på den aktuelle instans af objektet, specifikt på det objekt, som denne metode kaldes for.

Objektmonitorer

Når en tråd erhverver en objektmonitor, opnår den eksklusiv adgang til synkroniserede metoder eller blokke af det pågældende objekt. Andre tråde, der forsøger at få adgang til synkroniserede metoder eller blokke af det samme objekt, vil blive blokeret, indtil monitoren bliver frigivet.

Metoderne wait(), notify(), notifyAll()

Metoden wait() anvendes til at suspendere udførelsen af den aktuelle tråd og frigive de ressourcer, den benytter, indtil en anden tråd kalder metoden notify() eller notifyAll() for det samme monitorobjekt.

Metoderne notify() og notifyAll() anvendes til at genoptage udførelsen af én eller alle tråde, der er blokeret på et monitorobjekt.

Note
Bemærk

Metoderne wait(), notify() og notifyAll() skal kaldes inde i en synkroniseret blok, der er knyttet til det samme monitorobjekt som den ventende tråd, for at sikre korrekt synkronisering.

I det næste kapitel vil vi undersøge, hvad der kan ske, hvis du ikke bruger synkronisering.

1. Hvad gør nøgleordet synchronized i Java?

2. Hvordan fungerer objektmonitoren i Java?

question mark

Hvad gør nøgleordet synchronized i Java?

Select the correct answer

question mark

Hvordan fungerer objektmonitoren i Java?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 4
some-alt