Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Beispiele Für Die Verwendung Von Collections-Methoden | Synchronisierte Collections
Multithreading in Java

bookBeispiele Für Die Verwendung Von Collections-Methoden

Note
Hinweis

Heute betrachten wir hauptsächlich Methoden, die dabei helfen, threadsichere Collections zu erstellen.

Collections-Methoden

Hier sind einige wichtige Methoden, die von der Klasse bereitgestellt werden, um synchronisierte Collections-Sammlungen zu erstellen:

synchronizedList(List<T> list): Gibt eine synchronisierte (thread-sichere) Liste zurück, die denselben Vertrag wie die übergebene Liste unterstützt.

Main.java

Main.java

copy
1
List<Object> listSync = Collections.synchronizedList(new ArrayList<>());

synchronizedSet(Set<T> set): Gibt eine synchronisierte (thread-sichere) Menge zurück, die denselben Vertrag wie die übergebene Menge unterstützt.

Main.java

Main.java

copy
1
Set<Object> setSync = Collections.synchronizedSet(new HashSet<>());

synchronizedMap(Map<K, V> m): Gibt eine synchronisierte (thread-sichere) Map zurück, die denselben Vertrag wie die übergebene Map unterstützt.

Main.java

Main.java

copy
1
Map<Object, Object> mapSync = Collections.synchronizedMap(new HashMap<>());

unmodifiableList(List<? extends T> list): Gibt eine unveränderliche Liste zurück, die die gleichen Elemente wie die angegebene Liste enthält.

Main.java

Main.java

copy
123456789101112131415
package 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): Gibt eine unveränderliche Map zurück, die die gleichen Zuordnungen wie die angegebene Map enthält.

Main.java

Main.java

copy
12345678910111213
package 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): Gibt eine unveränderliche Menge zurück, die die gleichen Elemente wie die angegebene Menge enthält.

Main.java

Main.java

copy
12345678910111213
package 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` } }

Was ist also der Unterschied zwischen dem Erstellen synchronisierter Collections durch normale Implementierungen (wie in den vorherigen Kapiteln besprochen) und der Verwendung von Collections-Methoden?

Betrachten wir den Unterschied am Beispiel einer Map-Collection

Unterschiede zwischen ConcurrentHashMap und synchronizedMap()

ConcurrentHashMap verwendet eine fortschrittliche Methode namens Lock Splitting, bei der die Map in Segmente unterteilt und Operationen nur auf Segmentebene synchronisiert werden. Dieser Ansatz ermöglicht es mehreren Threads, gleichzeitig Daten in verschiedenen Segmenten der Map zu lesen und zu schreiben, was die Nebenläufigkeit und Leistung verbessert.

Die Methode synchronizedMap() umschließt die ursprüngliche Map in ein synchronisiertes Proxy-Objekt. Alle Methoden dieses Proxy-Objekts sind synchronisiert, was die Thread-Sicherheit gewährleistet. Dieser Ansatz kann jedoch die Leistung in einer Multithread-Umgebung aufgrund der hohen Sperrfrequenz verringern.

Beispielsweise blockieren sich Threads bei ConcurrentHashMap nicht gegenseitig, wenn sie in verschiedene Buckets schreiben. Greifen jedoch 2 Threads auf denselben Bucket zu, muss einer warten. Wird die Collection hingegen über synchronizedMap() erstellt, erhält nur 1 Thread Zugriff auf alle Buckets, und die gesamte Map ist gesperrt.

Das bedeutet, dass andere Threads erst dann zugreifen können, wenn ein Thread seine Arbeit beendet hat. Dadurch werden Operationen in ConcurrentHashMap einfach schneller ausgeführt.

Außerdem gibt es in Collections weitere Methoden für die komfortable Arbeit mit Collections:

Note
Hinweis

Die Klasse Collections stellt praktische Methoden für die Arbeit mit Collections in Java bereit und vereinfacht häufig verwendete Operationen. Synchronisierte Collections, die über Collections-Methoden erstellt werden, sind nützlich für die Threadsicherheit. Für komplexere Multithreading-Aufgaben ist es jedoch besser, Collections aus dem Paket java.util.concurrent zu verwenden.

1. Welche Methode der Klasse Collections wird verwendet, um eine unveränderliche Liste zu erstellen?

2. Welche der folgenden Methoden der Klasse Collections gibt eine threadsichere Map zurück?

3. Was ist der Unterschied zwischen ConcurrentHashMap und synchronizedMap?

question mark

Welche Methode der Klasse Collections wird verwendet, um eine unveränderliche Liste zu erstellen?

Select the correct answer

question mark

Welche der folgenden Methoden der Klasse Collections gibt eine threadsichere Map zurück?

Select the correct answer

question mark

Was ist der Unterschied zwischen ConcurrentHashMap und synchronizedMap?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 8

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Awesome!

Completion rate improved to 3.33

bookBeispiele Für Die Verwendung Von Collections-Methoden

Swipe um das Menü anzuzeigen

Note
Hinweis

Heute betrachten wir hauptsächlich Methoden, die dabei helfen, threadsichere Collections zu erstellen.

Collections-Methoden

Hier sind einige wichtige Methoden, die von der Klasse bereitgestellt werden, um synchronisierte Collections-Sammlungen zu erstellen:

synchronizedList(List<T> list): Gibt eine synchronisierte (thread-sichere) Liste zurück, die denselben Vertrag wie die übergebene Liste unterstützt.

Main.java

Main.java

copy
1
List<Object> listSync = Collections.synchronizedList(new ArrayList<>());

synchronizedSet(Set<T> set): Gibt eine synchronisierte (thread-sichere) Menge zurück, die denselben Vertrag wie die übergebene Menge unterstützt.

Main.java

Main.java

copy
1
Set<Object> setSync = Collections.synchronizedSet(new HashSet<>());

synchronizedMap(Map<K, V> m): Gibt eine synchronisierte (thread-sichere) Map zurück, die denselben Vertrag wie die übergebene Map unterstützt.

Main.java

Main.java

copy
1
Map<Object, Object> mapSync = Collections.synchronizedMap(new HashMap<>());

unmodifiableList(List<? extends T> list): Gibt eine unveränderliche Liste zurück, die die gleichen Elemente wie die angegebene Liste enthält.

Main.java

Main.java

copy
123456789101112131415
package 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): Gibt eine unveränderliche Map zurück, die die gleichen Zuordnungen wie die angegebene Map enthält.

Main.java

Main.java

copy
12345678910111213
package 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): Gibt eine unveränderliche Menge zurück, die die gleichen Elemente wie die angegebene Menge enthält.

Main.java

Main.java

copy
12345678910111213
package 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` } }

Was ist also der Unterschied zwischen dem Erstellen synchronisierter Collections durch normale Implementierungen (wie in den vorherigen Kapiteln besprochen) und der Verwendung von Collections-Methoden?

Betrachten wir den Unterschied am Beispiel einer Map-Collection

Unterschiede zwischen ConcurrentHashMap und synchronizedMap()

ConcurrentHashMap verwendet eine fortschrittliche Methode namens Lock Splitting, bei der die Map in Segmente unterteilt und Operationen nur auf Segmentebene synchronisiert werden. Dieser Ansatz ermöglicht es mehreren Threads, gleichzeitig Daten in verschiedenen Segmenten der Map zu lesen und zu schreiben, was die Nebenläufigkeit und Leistung verbessert.

Die Methode synchronizedMap() umschließt die ursprüngliche Map in ein synchronisiertes Proxy-Objekt. Alle Methoden dieses Proxy-Objekts sind synchronisiert, was die Thread-Sicherheit gewährleistet. Dieser Ansatz kann jedoch die Leistung in einer Multithread-Umgebung aufgrund der hohen Sperrfrequenz verringern.

Beispielsweise blockieren sich Threads bei ConcurrentHashMap nicht gegenseitig, wenn sie in verschiedene Buckets schreiben. Greifen jedoch 2 Threads auf denselben Bucket zu, muss einer warten. Wird die Collection hingegen über synchronizedMap() erstellt, erhält nur 1 Thread Zugriff auf alle Buckets, und die gesamte Map ist gesperrt.

Das bedeutet, dass andere Threads erst dann zugreifen können, wenn ein Thread seine Arbeit beendet hat. Dadurch werden Operationen in ConcurrentHashMap einfach schneller ausgeführt.

Außerdem gibt es in Collections weitere Methoden für die komfortable Arbeit mit Collections:

Note
Hinweis

Die Klasse Collections stellt praktische Methoden für die Arbeit mit Collections in Java bereit und vereinfacht häufig verwendete Operationen. Synchronisierte Collections, die über Collections-Methoden erstellt werden, sind nützlich für die Threadsicherheit. Für komplexere Multithreading-Aufgaben ist es jedoch besser, Collections aus dem Paket java.util.concurrent zu verwenden.

1. Welche Methode der Klasse Collections wird verwendet, um eine unveränderliche Liste zu erstellen?

2. Welche der folgenden Methoden der Klasse Collections gibt eine threadsichere Map zurück?

3. Was ist der Unterschied zwischen ConcurrentHashMap und synchronizedMap?

question mark

Welche Methode der Klasse Collections wird verwendet, um eine unveränderliche Liste zu erstellen?

Select the correct answer

question mark

Welche der folgenden Methoden der Klasse Collections gibt eine threadsichere Map zurück?

Select the correct answer

question mark

Was ist der Unterschied zwischen ConcurrentHashMap und synchronizedMap?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 8
some-alt