Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Concurrentmap og Dets Implementasjoner | Synkroniserte Samlinger
Quizzes & Challenges
Quizzes
Challenges
/
Multitråding i Java

bookConcurrentmap og Dets Implementasjoner

Virkelig eksempel

En nettapplikasjon bruker ConcurrentMap for å mellomlagre ofte forespurte data som brukersesjoner. Ulike tråder kan samtidig oppdatere og lese data fra kartet, noe som sikrer rask tilgang og trygge operasjoner.

Forskjeller fra andre typer

  • Sikkerhet i et flertrådet miljø: ConcurrentMap håndterer automatisk synkronisering av datatilganger, mens dette må gjøres manuelt i en vanlig Map;
  • Effektivitet: Muliggjør lesing og skriving av data parallelt uten å låse hele datastrukturen.

ConcurrentMap-implementasjoner

ConcurrentHashMap: Støtter effektivt flere tråder ved å dele opp kartet i segmenter (bøtter), noe som muliggjør parallell utførelse av operasjoner uten å låse hele kartet.

Syntaks

Main.java

Main.java

copy
1
ConcurrentMap<Integer, Integer> concurrentHashMap = new ConcurrentHashMap<>();

ConcurrentHashMap i Java deler data inn i flere bøtter, hver styrt av en egen monitor. Denne oppbygningen gjør det mulig for ulike tråder å endre eller lese data fra forskjellige bøtter samtidig, noe som forbedrer ytelsen.

Tråder kan få tilgang til bøtter parallelt, noe som reduserer låser og forhindrer datakollisjoner.

Hver bøtte inneholder poster i form av nøkkel-verdi-par, som kan organiseres som lenkede lister.

ConcurrentSkipListMap: En implementasjon basert på skip-liste som støtter sortert nøkkelrekkefølge. Gir rask innsetting, sletting og tilgang til data i et multitrådet miljø.

Syntaks

Main.java

Main.java

copy
1
ConcurrentMap<Integer, Integer> concurrentSkipListMap = new ConcurrentSkipListMap<>();

📝Innsetting: Når et nytt element legges til i ConcurrentSkipListMap, starter det på laveste nivå. Deretter flyttes det opp gjennom nivåene til det er plassert der nøkler og verdier er i riktig rekkefølge.

🔍Søk: For å finne et element etter nøkkel, starter ConcurrentSkipListMap ved hodet på øverste nivå. Den følger pekerne til den finner en node med en nøkkel som er lik eller større enn søkenøkkelen.

❌Sletting: For å slette et element fra ConcurrentSkipListMap, fjernes det først fra laveste nivå. Deretter nedgraderes det gjennom nivåene til det er fjernet fra der nøkler og verdier er korrekt ordnet.

Eksempel på bruk av ConcurrentMap i kode

Hovedmetoder

putIfAbsent(K key, V value): Legger til et nøkkel-verdi-par i kartet kun hvis nøkkelen ikke allerede finnes.

Main.java

Main.java

copy
123
ConcurrentMap<String, Integer> map = new ConcurrentHashMap<>(); map.putIfAbsent("a", 1); // Adds the pair ("a", 1) to the map, as "a" is not already present map.putIfAbsent("a", 2); // Does not change the value, as "a" is already present in the map

remove(Object key, Object value): Fjerner nøkkel-verdi-par hvis nøkkelen er tilordnet den angitte verdien.

Main.java

Main.java

copy
1234
ConcurrentMap<String, Integer> map = new ConcurrentHashMap<>(); map.put("a", 1); map.remove("a", 1); // Removes the pair ("a", 1), as "a" is mapped to value 1 map.remove("a", 2); // Does nothing, as "a" is not mapped to value 2

replace(K key, V value): Erstatter oppføringen for en nøkkel kun hvis den for øyeblikket er tilordnet en verdi.

Main.java

Main.java

copy
1234
ConcurrentMap<String, Integer> map = new ConcurrentHashMap<>(); map.put("a", 1); map.replace("a", 2); // Replaces the value 1 with 2 for key "a" map.replace("b", 3); // Does nothing, as "b" is not present

compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction): Beregner en ny verdi for den angitte nøkkelen ved å bruke den oppgitte remapping-funksjonen, som kan innebære opprettelse av en ny verdi, modifisering eller fjerning av eksisterende verdi.

Main.java

Main.java

copy
1234
ConcurrentMap<String, Integer> map = new ConcurrentHashMap<>(); map.put("a", 1); map.compute("a", (k, v) -> v == null ? 1 : v + 1); // Increases the value for key "a" by 1 map.compute("b", (k, v) -> v == null ? 1 : v + 1); // Sets the value to 1 for new key "b"

merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction): Slår sammen gitt verdi med eksisterende verdi tilknyttet nøkkelen ved hjelp av den angitte remapping-funksjonen, som hjelper til med å aggregere data.

Main.java

Main.java

copy
1234
ConcurrentMap<String, Integer> map = new ConcurrentHashMap<>(); map.put("a", 1); map.merge("a", 2, Integer::sum); // Sums the current value (1) with the new value (2), resulting in 3 map.merge("b", 2, Integer::sum); // Sets the value to 2 for new key "b"

getOrDefault(Object key, V defaultValue) - returnerer verdien tilknyttet den angitte nøkkelen, eller standardverdien hvis nøkkelen ikke finnes.

Main.java

Main.java

copy
1234
ConcurrentMap<String, Integer> map = new ConcurrentHashMap<>(); map.put("a", 1); int value1 = map.getOrDefault("a", 0); // Returns 1, as "a" is present int value2 = map.getOrDefault("b", 0); // Returns 0, as "b" is not present

😔 Begrensninger

En av de potensielle ulempene er ustabil rekkefølge, ettersom noen implementasjoner kanskje ikke garanterer rekkefølgen på elementene under iterasjon. I tillegg kan det være begrenset støtte for enkelte operasjoner; for eksempel kan atomiske betingede oppdateringer ikke være fullstendig støttet i noen implementasjoner.

💪 Fordeler

På den positive siden er høy ytelse en viktig fordel, noe som gjør det godt egnet for scenarier med intensive lese- og skriveoperasjoner. Det gir også enkel bruk, og reduserer behovet for manuell håndtering av synkronisering i et flertrådet miljø.

1. Hva er formålet med ConcurrentMap?

2. Hvilken av følgende er en trådsikker implementasjon av ConcurrentMap?

3. Hvordan sikrer ConcurrentHashMap trådsikkerhet?

question mark

Hva er formålet med ConcurrentMap?

Select the correct answer

question mark

Hvilken av følgende er en trådsikker implementasjon av ConcurrentMap?

Select the correct answer

question mark

Hvordan sikrer ConcurrentHashMap trådsikkerhet?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. 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

Suggested prompts:

What are some common use cases for ConcurrentMap in real-world applications?

Can you explain the difference between ConcurrentHashMap and ConcurrentSkipListMap?

How does ConcurrentMap ensure thread safety compared to a regular Map?

Awesome!

Completion rate improved to 3.33

bookConcurrentmap og Dets Implementasjoner

Sveip for å vise menyen

Virkelig eksempel

En nettapplikasjon bruker ConcurrentMap for å mellomlagre ofte forespurte data som brukersesjoner. Ulike tråder kan samtidig oppdatere og lese data fra kartet, noe som sikrer rask tilgang og trygge operasjoner.

Forskjeller fra andre typer

  • Sikkerhet i et flertrådet miljø: ConcurrentMap håndterer automatisk synkronisering av datatilganger, mens dette må gjøres manuelt i en vanlig Map;
  • Effektivitet: Muliggjør lesing og skriving av data parallelt uten å låse hele datastrukturen.

ConcurrentMap-implementasjoner

ConcurrentHashMap: Støtter effektivt flere tråder ved å dele opp kartet i segmenter (bøtter), noe som muliggjør parallell utførelse av operasjoner uten å låse hele kartet.

Syntaks

Main.java

Main.java

copy
1
ConcurrentMap<Integer, Integer> concurrentHashMap = new ConcurrentHashMap<>();

ConcurrentHashMap i Java deler data inn i flere bøtter, hver styrt av en egen monitor. Denne oppbygningen gjør det mulig for ulike tråder å endre eller lese data fra forskjellige bøtter samtidig, noe som forbedrer ytelsen.

Tråder kan få tilgang til bøtter parallelt, noe som reduserer låser og forhindrer datakollisjoner.

Hver bøtte inneholder poster i form av nøkkel-verdi-par, som kan organiseres som lenkede lister.

ConcurrentSkipListMap: En implementasjon basert på skip-liste som støtter sortert nøkkelrekkefølge. Gir rask innsetting, sletting og tilgang til data i et multitrådet miljø.

Syntaks

Main.java

Main.java

copy
1
ConcurrentMap<Integer, Integer> concurrentSkipListMap = new ConcurrentSkipListMap<>();

📝Innsetting: Når et nytt element legges til i ConcurrentSkipListMap, starter det på laveste nivå. Deretter flyttes det opp gjennom nivåene til det er plassert der nøkler og verdier er i riktig rekkefølge.

🔍Søk: For å finne et element etter nøkkel, starter ConcurrentSkipListMap ved hodet på øverste nivå. Den følger pekerne til den finner en node med en nøkkel som er lik eller større enn søkenøkkelen.

❌Sletting: For å slette et element fra ConcurrentSkipListMap, fjernes det først fra laveste nivå. Deretter nedgraderes det gjennom nivåene til det er fjernet fra der nøkler og verdier er korrekt ordnet.

Eksempel på bruk av ConcurrentMap i kode

Hovedmetoder

putIfAbsent(K key, V value): Legger til et nøkkel-verdi-par i kartet kun hvis nøkkelen ikke allerede finnes.

Main.java

Main.java

copy
123
ConcurrentMap<String, Integer> map = new ConcurrentHashMap<>(); map.putIfAbsent("a", 1); // Adds the pair ("a", 1) to the map, as "a" is not already present map.putIfAbsent("a", 2); // Does not change the value, as "a" is already present in the map

remove(Object key, Object value): Fjerner nøkkel-verdi-par hvis nøkkelen er tilordnet den angitte verdien.

Main.java

Main.java

copy
1234
ConcurrentMap<String, Integer> map = new ConcurrentHashMap<>(); map.put("a", 1); map.remove("a", 1); // Removes the pair ("a", 1), as "a" is mapped to value 1 map.remove("a", 2); // Does nothing, as "a" is not mapped to value 2

replace(K key, V value): Erstatter oppføringen for en nøkkel kun hvis den for øyeblikket er tilordnet en verdi.

Main.java

Main.java

copy
1234
ConcurrentMap<String, Integer> map = new ConcurrentHashMap<>(); map.put("a", 1); map.replace("a", 2); // Replaces the value 1 with 2 for key "a" map.replace("b", 3); // Does nothing, as "b" is not present

compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction): Beregner en ny verdi for den angitte nøkkelen ved å bruke den oppgitte remapping-funksjonen, som kan innebære opprettelse av en ny verdi, modifisering eller fjerning av eksisterende verdi.

Main.java

Main.java

copy
1234
ConcurrentMap<String, Integer> map = new ConcurrentHashMap<>(); map.put("a", 1); map.compute("a", (k, v) -> v == null ? 1 : v + 1); // Increases the value for key "a" by 1 map.compute("b", (k, v) -> v == null ? 1 : v + 1); // Sets the value to 1 for new key "b"

merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction): Slår sammen gitt verdi med eksisterende verdi tilknyttet nøkkelen ved hjelp av den angitte remapping-funksjonen, som hjelper til med å aggregere data.

Main.java

Main.java

copy
1234
ConcurrentMap<String, Integer> map = new ConcurrentHashMap<>(); map.put("a", 1); map.merge("a", 2, Integer::sum); // Sums the current value (1) with the new value (2), resulting in 3 map.merge("b", 2, Integer::sum); // Sets the value to 2 for new key "b"

getOrDefault(Object key, V defaultValue) - returnerer verdien tilknyttet den angitte nøkkelen, eller standardverdien hvis nøkkelen ikke finnes.

Main.java

Main.java

copy
1234
ConcurrentMap<String, Integer> map = new ConcurrentHashMap<>(); map.put("a", 1); int value1 = map.getOrDefault("a", 0); // Returns 1, as "a" is present int value2 = map.getOrDefault("b", 0); // Returns 0, as "b" is not present

😔 Begrensninger

En av de potensielle ulempene er ustabil rekkefølge, ettersom noen implementasjoner kanskje ikke garanterer rekkefølgen på elementene under iterasjon. I tillegg kan det være begrenset støtte for enkelte operasjoner; for eksempel kan atomiske betingede oppdateringer ikke være fullstendig støttet i noen implementasjoner.

💪 Fordeler

På den positive siden er høy ytelse en viktig fordel, noe som gjør det godt egnet for scenarier med intensive lese- og skriveoperasjoner. Det gir også enkel bruk, og reduserer behovet for manuell håndtering av synkronisering i et flertrådet miljø.

1. Hva er formålet med ConcurrentMap?

2. Hvilken av følgende er en trådsikker implementasjon av ConcurrentMap?

3. Hvordan sikrer ConcurrentHashMap trådsikkerhet?

question mark

Hva er formålet med ConcurrentMap?

Select the correct answer

question mark

Hvilken av følgende er en trådsikker implementasjon av ConcurrentMap?

Select the correct answer

question mark

Hvordan sikrer ConcurrentHashMap trådsikkerhet?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 5
some-alt