Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Ytelse og Utfordringer | Grunnleggende om Multitråding
Quizzes & Challenges
Quizzes
Challenges
/
Multitråding i Java

bookYtelse og Utfordringer

Ytelsesmåling

Du kan bruke metodene nanoTime() eller System.currentTimeMillis() for å måle kjøretiden til multitrådet kode.

Note
Merk

I denne videoen sammenlignes ytelsen til multitrådet og enkelttrådet summering av elementer i en tabell i Java. Den initialiserer en tabell med tilfeldige heltall, fordeler oppgaven på flere tråder for å beregne summen parallelt, og utfører deretter samme summering sekvensielt for å måle og sammenligne kjøretider.

Data Race

Race conditions oppstår i multitrådede programmer når to eller flere tråder samtidig forsøker å operere på en delt ressurs uten korrekt synkronisering. Dette kan føre til uforutsigbar og feilaktig programatferd fordi resultatene avhenger av hvordan trådene kjører i parallell og hvor raskt de får tilgang til den delte ressursen.

Dette problemet ble diskutert i forrige seksjon, hvor det ble vist hvordan man kan løse det ved å bruke nøkkelordet synchronized.

Uforutsigbar oppførsel

Uforutsigbar oppførsel kan oppstå ved feilaktig synkronisering. For eksempel kan mangel på synkronisering føre til at tråder arbeider med utdatert data.

I denne videoen demonstrerer koden problemet med uforutsigbar oppførsel i flertrådede applikasjoner forårsaket av usynkronisert tilgang til delt tilstand.

Note
Merk

Dette problemet kan løses ved å bruke volatile-nøkkelordet. En variabel deklarert som volatile kan endres av flere tråder samtidig. Dette garanterer at verdien til variabelen umiddelbart blir synlig for alle andre tråder etter endringen.

Men du trenger ikke å erklære alle felt som volatile

Variabler erklært som volatile synkroniseres med hovedminnet ved hver lesing og skriving. Dette betyr at når én tråd oppdaterer verdien til en volatile-variabel, blir endringen umiddelbart synlig for alle andre tråder, noe som forbedrer synlighet. Dette medfører imidlertid også at lesinger kan bli tregere, så bruk volatile kun når det er nødvendig.

Deadlock

Deadlock oppstår når to eller flere tråder blir sittende fast og venter på at hverandre skal frigjøre ressurser.

I videoen støtte vi på deadlock da to tråder samtidig låste monitorene til objekter i forskjellige rekkefølger, noe som førte til en situasjon der trådene bare ventet på at hverandre skulle frigjøre monitorene de trengte.

For å løse dette problemet må vi sørge for at slike situasjoner ikke oppstår. Dette kan vi oppnå ved å sikre at alle tråder låser monitorene til objektene i samme rekkefølge.

I dette tilfellet vil den første tråden som låser en objekts monitor hindre andre tråder fra å låse den samme monitoren, og tvinge dem til å vente til den første tråden fullfører sin oppgave. Først når den første tråden er ferdig, vil den frigjøre monitoren, slik at andre tråder kan fortsette.

Unngå problemer med multitråding

Datasynkronisering: Bruk synchronized-nøkkelordet for metoder og kodeblokker for å forhindre datarace.

Unngå gjensidig låsing: Sørg for at alle tråder tilegner seg ressurser i samme rekkefølge.

1. Hvilken metode brukes for å måle kodeutførelsestid i nanosekunder?

2. Hva kalles problemet når flere tråder samtidig prøver å endre samme ressurs?

question mark

Hvilken metode brukes for å måle kodeutførelsestid i nanosekunder?

Select the correct answer

question mark

Hva kalles problemet når flere tråder samtidig prøver å endre samme ressurs?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 5

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

bookYtelse og Utfordringer

Sveip for å vise menyen

Ytelsesmåling

Du kan bruke metodene nanoTime() eller System.currentTimeMillis() for å måle kjøretiden til multitrådet kode.

Note
Merk

I denne videoen sammenlignes ytelsen til multitrådet og enkelttrådet summering av elementer i en tabell i Java. Den initialiserer en tabell med tilfeldige heltall, fordeler oppgaven på flere tråder for å beregne summen parallelt, og utfører deretter samme summering sekvensielt for å måle og sammenligne kjøretider.

Data Race

Race conditions oppstår i multitrådede programmer når to eller flere tråder samtidig forsøker å operere på en delt ressurs uten korrekt synkronisering. Dette kan føre til uforutsigbar og feilaktig programatferd fordi resultatene avhenger av hvordan trådene kjører i parallell og hvor raskt de får tilgang til den delte ressursen.

Dette problemet ble diskutert i forrige seksjon, hvor det ble vist hvordan man kan løse det ved å bruke nøkkelordet synchronized.

Uforutsigbar oppførsel

Uforutsigbar oppførsel kan oppstå ved feilaktig synkronisering. For eksempel kan mangel på synkronisering føre til at tråder arbeider med utdatert data.

I denne videoen demonstrerer koden problemet med uforutsigbar oppførsel i flertrådede applikasjoner forårsaket av usynkronisert tilgang til delt tilstand.

Note
Merk

Dette problemet kan løses ved å bruke volatile-nøkkelordet. En variabel deklarert som volatile kan endres av flere tråder samtidig. Dette garanterer at verdien til variabelen umiddelbart blir synlig for alle andre tråder etter endringen.

Men du trenger ikke å erklære alle felt som volatile

Variabler erklært som volatile synkroniseres med hovedminnet ved hver lesing og skriving. Dette betyr at når én tråd oppdaterer verdien til en volatile-variabel, blir endringen umiddelbart synlig for alle andre tråder, noe som forbedrer synlighet. Dette medfører imidlertid også at lesinger kan bli tregere, så bruk volatile kun når det er nødvendig.

Deadlock

Deadlock oppstår når to eller flere tråder blir sittende fast og venter på at hverandre skal frigjøre ressurser.

I videoen støtte vi på deadlock da to tråder samtidig låste monitorene til objekter i forskjellige rekkefølger, noe som førte til en situasjon der trådene bare ventet på at hverandre skulle frigjøre monitorene de trengte.

For å løse dette problemet må vi sørge for at slike situasjoner ikke oppstår. Dette kan vi oppnå ved å sikre at alle tråder låser monitorene til objektene i samme rekkefølge.

I dette tilfellet vil den første tråden som låser en objekts monitor hindre andre tråder fra å låse den samme monitoren, og tvinge dem til å vente til den første tråden fullfører sin oppgave. Først når den første tråden er ferdig, vil den frigjøre monitoren, slik at andre tråder kan fortsette.

Unngå problemer med multitråding

Datasynkronisering: Bruk synchronized-nøkkelordet for metoder og kodeblokker for å forhindre datarace.

Unngå gjensidig låsing: Sørg for at alle tråder tilegner seg ressurser i samme rekkefølge.

1. Hvilken metode brukes for å måle kodeutførelsestid i nanosekunder?

2. Hva kalles problemet når flere tråder samtidig prøver å endre samme ressurs?

question mark

Hvilken metode brukes for å måle kodeutførelsestid i nanosekunder?

Select the correct answer

question mark

Hva kalles problemet når flere tråder samtidig prøver å endre samme ressurs?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 5
some-alt