Eksempler på Bruk av Collections-Metoder
I dag skal vi hovedsakelig se på metoder som hjelper til med å lage trådsikre samlinger.
Collections-metoder
Her er noen viktige metoder levert av klassen for å lage synkroniserte Collections samlinger:
synchronizedList(List<T> list): Returnerer en synkronisert (trådsikker) liste som støtter samme kontrakt som den oppgitte listen.
Main.java
1List<Object> listSync = Collections.synchronizedList(new ArrayList<>());
synchronizedSet(Set<T> set): Returnerer et synkronisert (trådsikkert) sett som støtter samme kontrakt som det oppgitte settet.
Main.java
1Set<Object> setSync = Collections.synchronizedSet(new HashSet<>());
synchronizedMap(Map<K, V> m): Returnerer et synkronisert (trådsikkert) map som støtter samme kontrakt som det overførte map-et.
Main.java
1Map<Object, Object> mapSync = Collections.synchronizedMap(new HashMap<>());
unmodifiableList(List<? extends T> list): Returnerer en uforanderlig liste som inneholder de samme elementene som den angitte listen.
Main.java
123456789101112131415package com.example; import java.util.Collections; import java.util.List; import java.util.ArrayList; public class Main { public static void main(String[] args) { List<Integer> unmodifiableList = Collections.unmodifiableList(new ArrayList<>(List.of(1,2,3))); System.out.println(unmodifiableList); // output [1,2,3] unmodifiableList.add(4); // throw exception `UnsupportedOperationException` } }
unmodifiableMap(Map<? extends K, ? extends V> m): Returnerer et uforanderlig map som inneholder de samme tilordningene som det angitte mapet.
Main.java
12345678910111213package com.example; import java.util.Collections; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { Map<Integer, Integer> unmodifiableMap = Collections.unmodifiableMap(new HashMap<>()); unmodifiableMap.put(1, 2); // exception `UnsupportedOperationException` } }
unmodifiableSet(Set<? extends T> set): Returnerer et ikke-modifiserbart sett som inneholder de samme elementene som det spesifiserte settet.
Main.java
12345678910111213package com.example; import java.util.Collections; import java.util.Set; import java.util.HashSet; public class Main { public static void main(String[] args) { Set<Integer> unmodifiableSet = Collections.unmodifiableSet(new HashSet<>()); unmodifiableSet.add(4); // exception `UnsupportedOperationException` } }
Hva er da forskjellen mellom å opprette synkroniserte samlinger gjennom vanlige implementasjoner (de som ble diskutert i forrige kapittel) og å bruke Collections-metoder?
La oss se på forskjellen ved å bruke én Map-samling som eksempel
Forskjeller mellom ConcurrentHashMap og synchronizedMap()
ConcurrentHashMap benytter en avansert metode kjent som lock splitting, som deler opp map i segmenter og synkroniserer operasjoner kun på segmentnivå. Denne tilnærmingen gjør det mulig for flere tråder å lese og skrive data samtidig i forskjellige segmenter av map-en, noe som forbedrer samtidighet og ytelse.
Metoden synchronizedMap() pakker det opprinnelige kartet inn i et synkronisert proxy-objekt. Alle metodene til dette proxy-objektet er synkroniserte, noe som sikrer trådsikkerhet. Denne tilnærmingen kan imidlertid redusere ytelsen i et flertrådet miljø på grunn av høy låsefrekvens.
For eksempel, hvis ConcurrentHashMap skriver til ulike buckets, vil trådene ikke blokkere hverandre. Men hvis én bucket aksesseres av 2 tråder, må én av dem vente. På den annen side, hvis samlingen er opprettet via synchronizedMap(), vil kun 1 tråd ha tilgang til alle buckets, og hele kartet er blokkert.
Dette betyr at inntil én tråd er ferdig med sitt arbeid, vil andre tråder ikke kunne komme inn. Som et resultat blir operasjoner i ConcurrentHashMap rett og slett utført raskere.
Det finnes også andre metoder i Collections for praktisk arbeid med samlinger:
Collections-klassen tilbyr praktiske metoder for å arbeide med collections i Java, og forenkler ofte brukte operasjoner. Synkroniserte collections opprettet via Collections-metoder er nyttige for trådsikkerhet, men for mer komplekse flertrådede oppgaver er det bedre å bruke collections fra java.util.concurrent-pakken.
1. Hvilken metode i Collections-klassen brukes for å opprette en uforanderlig liste?
2. Hvilken av følgende metoder i Collections-klassen returnerer et trådsikkert map?
3. Hva er forskjellen mellom ConcurrentHashMap og synchronizedMap?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
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
Eksempler på Bruk av Collections-Metoder
Sveip for å vise menyen
I dag skal vi hovedsakelig se på metoder som hjelper til med å lage trådsikre samlinger.
Collections-metoder
Her er noen viktige metoder levert av klassen for å lage synkroniserte Collections samlinger:
synchronizedList(List<T> list): Returnerer en synkronisert (trådsikker) liste som støtter samme kontrakt som den oppgitte listen.
Main.java
1List<Object> listSync = Collections.synchronizedList(new ArrayList<>());
synchronizedSet(Set<T> set): Returnerer et synkronisert (trådsikkert) sett som støtter samme kontrakt som det oppgitte settet.
Main.java
1Set<Object> setSync = Collections.synchronizedSet(new HashSet<>());
synchronizedMap(Map<K, V> m): Returnerer et synkronisert (trådsikkert) map som støtter samme kontrakt som det overførte map-et.
Main.java
1Map<Object, Object> mapSync = Collections.synchronizedMap(new HashMap<>());
unmodifiableList(List<? extends T> list): Returnerer en uforanderlig liste som inneholder de samme elementene som den angitte listen.
Main.java
123456789101112131415package com.example; import java.util.Collections; import java.util.List; import java.util.ArrayList; public class Main { public static void main(String[] args) { List<Integer> unmodifiableList = Collections.unmodifiableList(new ArrayList<>(List.of(1,2,3))); System.out.println(unmodifiableList); // output [1,2,3] unmodifiableList.add(4); // throw exception `UnsupportedOperationException` } }
unmodifiableMap(Map<? extends K, ? extends V> m): Returnerer et uforanderlig map som inneholder de samme tilordningene som det angitte mapet.
Main.java
12345678910111213package com.example; import java.util.Collections; import java.util.Map; import java.util.HashMap; public class Main { public static void main(String[] args) { Map<Integer, Integer> unmodifiableMap = Collections.unmodifiableMap(new HashMap<>()); unmodifiableMap.put(1, 2); // exception `UnsupportedOperationException` } }
unmodifiableSet(Set<? extends T> set): Returnerer et ikke-modifiserbart sett som inneholder de samme elementene som det spesifiserte settet.
Main.java
12345678910111213package com.example; import java.util.Collections; import java.util.Set; import java.util.HashSet; public class Main { public static void main(String[] args) { Set<Integer> unmodifiableSet = Collections.unmodifiableSet(new HashSet<>()); unmodifiableSet.add(4); // exception `UnsupportedOperationException` } }
Hva er da forskjellen mellom å opprette synkroniserte samlinger gjennom vanlige implementasjoner (de som ble diskutert i forrige kapittel) og å bruke Collections-metoder?
La oss se på forskjellen ved å bruke én Map-samling som eksempel
Forskjeller mellom ConcurrentHashMap og synchronizedMap()
ConcurrentHashMap benytter en avansert metode kjent som lock splitting, som deler opp map i segmenter og synkroniserer operasjoner kun på segmentnivå. Denne tilnærmingen gjør det mulig for flere tråder å lese og skrive data samtidig i forskjellige segmenter av map-en, noe som forbedrer samtidighet og ytelse.
Metoden synchronizedMap() pakker det opprinnelige kartet inn i et synkronisert proxy-objekt. Alle metodene til dette proxy-objektet er synkroniserte, noe som sikrer trådsikkerhet. Denne tilnærmingen kan imidlertid redusere ytelsen i et flertrådet miljø på grunn av høy låsefrekvens.
For eksempel, hvis ConcurrentHashMap skriver til ulike buckets, vil trådene ikke blokkere hverandre. Men hvis én bucket aksesseres av 2 tråder, må én av dem vente. På den annen side, hvis samlingen er opprettet via synchronizedMap(), vil kun 1 tråd ha tilgang til alle buckets, og hele kartet er blokkert.
Dette betyr at inntil én tråd er ferdig med sitt arbeid, vil andre tråder ikke kunne komme inn. Som et resultat blir operasjoner i ConcurrentHashMap rett og slett utført raskere.
Det finnes også andre metoder i Collections for praktisk arbeid med samlinger:
Collections-klassen tilbyr praktiske metoder for å arbeide med collections i Java, og forenkler ofte brukte operasjoner. Synkroniserte collections opprettet via Collections-metoder er nyttige for trådsikkerhet, men for mer komplekse flertrådede oppgaver er det bedre å bruke collections fra java.util.concurrent-pakken.
1. Hvilken metode i Collections-klassen brukes for å opprette en uforanderlig liste?
2. Hvilken av følgende metoder i Collections-klassen returnerer et trådsikkert map?
3. Hva er forskjellen mellom ConcurrentHashMap og synchronizedMap?
Takk for tilbakemeldingene dine!